ограничение запроса метода $_POST

#php

#php

Вопрос:

 if($_POST['body']) {
//do my stuff
}
  

Но, допустим, я хочу ограничить доступ к $ _POST [‘body’] до 100 для каждого пользователя (IP).
Каждый раз, когда один и тот же пользователь (с тем же IP) обращается / пытается $ _POST[‘body’]), ir подсчитывает его, и если предел достигнут (это ограничение по времени 100), выводит сообщение об ошибке и с этим сообщает, что он может получить доступ к $ _POST [‘body’] через 10 минут.

Первая идея, пришедшая на ум, — использовать MySQL, регистрировать каждый IP-адрес и подсчитывать время доступа к нему. Но представьте, если на сайте много посетителей, сколько IP-адресов он регистрирует. Итак, это возможно сделать без mysql? Если да, пожалуйста, предоставьте скрипт.

Если что-то не понятно, просто спросите, и извините за английский :/

Ответ №1:

Достаточно ли для вас использования сеансов?

 if($_POST['body']){
    if($_SESSION['counter'] < 100){
       //...
       $_SESSION['counter']  ;
    }
}
  

Имейте в виду, что другой IP не означает другого пользователя. Многие пользователи могут находиться за одним и тем же прокси, предоставляя им всем один и тот же IP-адрес.

Комментарии:

1. 1 потому что это то, что я собирался предложить, и я бы сделал то же самое в отношении IP-адресов и прокси-серверов. Но не забудьте сделать session_start() заранее!

2. Если пользователь просто удаляет cookies или отказывается от них для этого сайта, этот подход не сработает.

3. Сеансы @Palantir выполняются на стороне сервера, а не на стороне клиента, поэтому для сеансов не имеет значения, принимает ли пользователь файлы cookie.

4. @m4rc пожалуйста, перейдите к чтению руководства. «Посетителю, заходящему на ваш веб-сайт, присваивается уникальный идентификатор, так называемый идентификатор сеанса. Это либо сохраняется в файле cookie на стороне пользователя, либо распространяется в URL.» php.net/manual/en/intro.session.php Удалите файл cookie, и вы уничтожите сеанс.

5. @Palantir Моя ошибка, приношу извинения.

Ответ №2:

Единственный способ — сохранить это на стороне сервера, и таблица базы данных не будет слишком сильно увеличиваться, если вы ее правильно очистите.

Вы могли бы использовать файлы cookie или сеансы (они основаны на файлах cookie), но это клиентская сторона, и люди могут просто удалить или изменить файл cookie.

Комментарии:

1. Вы имеете в виду MySQL cron / очистку через некоторое время?

2. Задание Cron для повторного запуска для удаления записей старше 10 минут

Ответ №3:

Моя первая мысль тоже была бы о DB. Вы пробовали cookies?