Страница 1 из 2

Ограничение количество запросов

Добавлено: 16 фев 2013, 23:17
manticore
Возник вопрос, как с помощью PHP ограничить количество запросов к определенному файлу от одного IP адреса?
Ведь такое возможно? :)

Re: Ограничение количество запросов

Добавлено: 16 фев 2013, 23:22
Грачик
Да возможно!

Re: Ограничение количество запросов

Добавлено: 16 фев 2013, 23:26
manticore
Грачик
В каком то смысле это был вопрос с утверждением, я и сам знал что такое возможно, интересно только как ^_^

Re: Ограничение количество запросов

Добавлено: 17 фев 2013, 01:20
sasha^
определить ип можно так например:

Код: Выделить всё

Ip = intIp = $_SERVER ["REMOTE_ADDR"]; if (isset ($_SERVER ["HTTP_X_FORWARDED_FOR"])) {  if (isset ($_SERVER ["HTTP_X_REAL_IP"]))   intIp = $_SERVER ["HTTP_X_REAL_IP"];  else   intIp = $_SERVER ["HTTP_X_FORWARDED_FOR"]; } 
Ip - внешний адрес, intIp - внутренний адрес

ну а чтобы запретить скачивание файла по сто раз с одного ип - вести бд...
и в случае, если чел уже качал или какое вам нужно условие - запрещать...
удачи! :D

Re: Ограничение количество запросов

Добавлено: 17 фев 2013, 01:27
manticore
sasha^
Запрос в базу данных все равно несет нагрузку, а мне нужно если пользователь 20-30 запросов в секунду отослал, то они не должны все обрабатываться, а только 5 из них, т.е что-то по типу защиту от DDoS, но у меня цели для этого другие. Например ответил сервер на 5 запросов, а остальные выдал ошибку насчет того, что слишком много запросов в секунду к серверу. Вот интересно как это можно реализовать без использования базы данных или записей в файлы.

Re: Ограничение количество запросов

Добавлено: 17 фев 2013, 07:53
Serge
manticore писал(а):sasha^
Запрос в базу данных все равно несет нагрузку, а мне нужно если пользователь 20-30 запросов в секунду отослал, то они не должны все обрабатываться, а только 5 из них, т.е что-то по типу защиту от DDoS, но у меня цели для этого другие. Например ответил сервер на 5 запросов, а остальные выдал ошибку насчет того, что слишком много запросов в секунду к серверу. Вот интересно как это можно реализовать без использования базы данных или записей в файлы.
Запрос в БД обрабатывается несколько милисекунд (Запрос занял 0.0007 сек.). К тому же, насколько я помню, пока не обработается предыдущий запрос - новый не начнет (в MySQL), так что по идее это и есть способ защиты от подобных множественных запросов.

Re: Ограничение количество запросов

Добавлено: 17 фев 2013, 15:07
sasha^
manticore писал(а):sasha^
Запрос в базу данных все равно несет нагрузку, а мне нужно если пользователь 20-30 запросов в секунду отослал, то они не должны все обрабатываться, а только 5 из них, т.е что-то по типу защиту от DDoS, но у меня цели для этого другие. Например ответил сервер на 5 запросов, а остальные выдал ошибку насчет того, что слишком много запросов в секунду к серверу. Вот интересно как это можно реализовать без использования базы данных или записей в файлы.
никак без записи в БД или файлы!
только если использовать, например сервер на java или c++ или других языках и в них в массиве хранить пользователей...
но я думаю вы слишком усложняете проще с БД...

Re: Ограничение количество запросов

Добавлено: 18 фев 2013, 10:08
manticore
Serge
sasha^
Спасибо вам ;)

Re: Ограничение количество запросов

Добавлено: 18 фев 2013, 11:37
manticore
Еще возник вопрос, что-то я не пойму как сравнить 5 запросов, то что они в 1 секунду. Например я могу сравнить только последний совершенный запрос сделан он за секунду до того что сейчас или нет, но как сравнить были ли те старые 2-3 запроса сделанные в ту секунду или нет. Кто поможет или направит?

Например в базе данных так:

1 запрос - 2 секунда.
2 запрос - 2 секунда.
3 запрос - 3 секунда.
4 запрос - 3 секунда.
5 запрос - 3 секунда.
6 запрос - 4 секунда.

5 запрос не должен пройти, т.к он считается слишком частым. Можно это как-то реализовать?

Re: Ограничение количество запросов

Добавлено: 22 фев 2013, 16:25
Александр
manticore

Код: Выделить всё

SELECT count(*) FROM table_name WHERE ip=111 AND time>NOW()-5