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

Программирование, которое не связано с API.
Аватара пользователя
manticore
Сообщения: 119
Зарегистрирован: 08 дек 2012, 18:53

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

Сообщение manticore »

Возник вопрос, как с помощью PHP ограничить количество запросов к определенному файлу от одного IP адреса?
Ведь такое возможно? :)
Грачик
Сообщения: 162
Зарегистрирован: 08 фев 2013, 16:04

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

Сообщение Грачик »

Да возможно!
Аватара пользователя
manticore
Сообщения: 119
Зарегистрирован: 08 дек 2012, 18:53

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

Сообщение manticore »

Грачик
В каком то смысле это был вопрос с утверждением, я и сам знал что такое возможно, интересно только как ^_^
sasha^
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52

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

Сообщение 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
Аватара пользователя
manticore
Сообщения: 119
Зарегистрирован: 08 дек 2012, 18:53

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

Сообщение manticore »

sasha^
Запрос в базу данных все равно несет нагрузку, а мне нужно если пользователь 20-30 запросов в секунду отослал, то они не должны все обрабатываться, а только 5 из них, т.е что-то по типу защиту от DDoS, но у меня цели для этого другие. Например ответил сервер на 5 запросов, а остальные выдал ошибку насчет того, что слишком много запросов в секунду к серверу. Вот интересно как это можно реализовать без использования базы данных или записей в файлы.
Serge
WEB Team
WEB Team
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55

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

Сообщение Serge »

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

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

Сообщение sasha^ »

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

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

Сообщение manticore »

Serge
sasha^
Спасибо вам ;)
Аватара пользователя
manticore
Сообщения: 119
Зарегистрирован: 08 дек 2012, 18:53

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

Сообщение manticore »

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

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

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

5 запрос не должен пройти, т.к он считается слишком частым. Можно это как-то реализовать?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

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

Сообщение Александр »

manticore

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

SELECT count(*) FROM table_name WHERE ip=111 AND time>NOW()-5
Ответить