Ограничение количество запросов
Ограничение количество запросов
Возник вопрос, как с помощью PHP ограничить количество запросов к определенному файлу от одного IP адреса?
Ведь такое возможно?
Ведь такое возможно?
Re: Ограничение количество запросов
Да возможно!
Re: Ограничение количество запросов
Грачик
В каком то смысле это был вопрос с утверждением, я и сам знал что такое возможно, интересно только как ^_^
В каком то смысле это был вопрос с утверждением, я и сам знал что такое возможно, интересно только как ^_^
Re: Ограничение количество запросов
определить ип можно так например:
Ip - внешний адрес, intIp - внутренний адрес
ну а чтобы запретить скачивание файла по сто раз с одного ип - вести бд...
и в случае, если чел уже качал или какое вам нужно условие - запрещать...
удачи!
Код: Выделить всё
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"]; }
ну а чтобы запретить скачивание файла по сто раз с одного ип - вести бд...
и в случае, если чел уже качал или какое вам нужно условие - запрещать...
удачи!
Re: Ограничение количество запросов
sasha^
Запрос в базу данных все равно несет нагрузку, а мне нужно если пользователь 20-30 запросов в секунду отослал, то они не должны все обрабатываться, а только 5 из них, т.е что-то по типу защиту от DDoS, но у меня цели для этого другие. Например ответил сервер на 5 запросов, а остальные выдал ошибку насчет того, что слишком много запросов в секунду к серверу. Вот интересно как это можно реализовать без использования базы данных или записей в файлы.
Запрос в базу данных все равно несет нагрузку, а мне нужно если пользователь 20-30 запросов в секунду отослал, то они не должны все обрабатываться, а только 5 из них, т.е что-то по типу защиту от DDoS, но у меня цели для этого другие. Например ответил сервер на 5 запросов, а остальные выдал ошибку насчет того, что слишком много запросов в секунду к серверу. Вот интересно как это можно реализовать без использования базы данных или записей в файлы.
Re: Ограничение количество запросов
Запрос в БД обрабатывается несколько милисекунд (Запрос занял 0.0007 сек.). К тому же, насколько я помню, пока не обработается предыдущий запрос - новый не начнет (в MySQL), так что по идее это и есть способ защиты от подобных множественных запросов.manticore писал(а):sasha^
Запрос в базу данных все равно несет нагрузку, а мне нужно если пользователь 20-30 запросов в секунду отослал, то они не должны все обрабатываться, а только 5 из них, т.е что-то по типу защиту от DDoS, но у меня цели для этого другие. Например ответил сервер на 5 запросов, а остальные выдал ошибку насчет того, что слишком много запросов в секунду к серверу. Вот интересно как это можно реализовать без использования базы данных или записей в файлы.
Re: Ограничение количество запросов
никак без записи в БД или файлы!manticore писал(а):sasha^
Запрос в базу данных все равно несет нагрузку, а мне нужно если пользователь 20-30 запросов в секунду отослал, то они не должны все обрабатываться, а только 5 из них, т.е что-то по типу защиту от DDoS, но у меня цели для этого другие. Например ответил сервер на 5 запросов, а остальные выдал ошибку насчет того, что слишком много запросов в секунду к серверу. Вот интересно как это можно реализовать без использования базы данных или записей в файлы.
только если использовать, например сервер на java или c++ или других языках и в них в массиве хранить пользователей...
но я думаю вы слишком усложняете проще с БД...
Re: Ограничение количество запросов
Serge
sasha^
Спасибо вам
sasha^
Спасибо вам
Re: Ограничение количество запросов
Еще возник вопрос, что-то я не пойму как сравнить 5 запросов, то что они в 1 секунду. Например я могу сравнить только последний совершенный запрос сделан он за секунду до того что сейчас или нет, но как сравнить были ли те старые 2-3 запроса сделанные в ту секунду или нет. Кто поможет или направит?
Например в базе данных так:
1 запрос - 2 секунда.
2 запрос - 2 секунда.
3 запрос - 3 секунда.
4 запрос - 3 секунда.
5 запрос - 3 секунда.
6 запрос - 4 секунда.
5 запрос не должен пройти, т.к он считается слишком частым. Можно это как-то реализовать?
Например в базе данных так:
1 запрос - 2 секунда.
2 запрос - 2 секунда.
3 запрос - 3 секунда.
4 запрос - 3 секунда.
5 запрос - 3 секунда.
6 запрос - 4 секунда.
5 запрос не должен пройти, т.к он считается слишком частым. Можно это как-то реализовать?
Re: Ограничение количество запросов
manticore
Код: Выделить всё
SELECT count(*) FROM table_name WHERE ip=111 AND time>NOW()-5