#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?