Как ограничить количество пользовательских комментариев / запросов в час в php - PullRequest
1 голос
/ 29 декабря 2011

У меня есть сайт, на котором есть несколько вариантов запроса (например, добавить фото, добавить комментарий). Я хочу ограничить количество запросов, сделанных пользователем, за определенное время, например, чтобы он не мог публиковать более 5 комментариев в течение часа, он не может добавлять более 5 фотографий в час и т. Д.

Моя идея состояла в том, чтобы делать / обновлять переменную сеанса каждый раз, когда отправляется действие формы, поэтому она суммирует до 5 (и если сеанс var == 5, это будет запрещать действие в каждой форме). Моя идея кажется мне хорошей, но я просто не могу найти способ сбросить определенную переменную сеанса через 1 час после ее инициации). Ждем любых идей

Ответы [ 5 ]

3 голосов
/ 29 декабря 2011

Делая это из SQL, используя простые команды SQL, вы можете получить количество элементов, выполненных за последний час, и, следовательно, нет необходимости использовать переменные сеанса (которые умрут, если пользователь сбросит свой сеанс)

Проверка количества "сообщений" для определенного элемента в текущем часе

SELECT
    COUNT(*) 
FROM 
    my_elements_table 
WHERE 
    HOUR(createdon) = HOUR(NOW()) 
    AND DATE(createdon) = CURDATE()
    AND createdby = the_user_you_are_checking

Проверка количества "сообщений" для определенного элемента в прошедшем часе

SELECT
    COUNT(*) 
FROM 
    my_elements_table 
WHERE 
    DATE_ADD(createdon, INTERVAL 1 HOUR) > NOW() 
    AND createdby = the_user_you_are_checking

Очевидно, адаптировать SQL на основе полей и таблиц базы данных, но у вас должна быть хорошая отправная точка для этого.

1 голос
/ 29 декабря 2011

Я предполагаю, что вы храните данные о комментариях и фотографиях в базе данных, по крайней мере, вы должны делать это с комментариями, но я думаю, что вы делаете это и с фотографиями.В этом случае я бы сохранил метку времени, когда был создан комментарий / фотографию, и идентификатор пользователя, который его создал, вместе с остальной информацией.

Когда пользователь затем пытается добавить другую фотографию иликомментарий, вы подсчитываете количество комментариев и фотографий в БД, которые были созданы этим конкретным пользователем за последние 60 минут.Если оно превышает пять, вы отклоняете запрос, в противном случае вы добавляете информацию.

1 голос
/ 29 декабря 2011

Ну, если у вас есть пользователи, вы храните их в базе данных, не так ли?Тогда почему бы не сохранить последний раз, когда они комментировали что-то в базе данных, и использовать это, чтобы проверить, могут ли они комментировать?

0 голосов
/ 29 декабря 2011

Другое решение - запросить в вашей базе данных комментарии, опубликованные в указанный вами период времени, и если число результатов превышает допустимое, не разрешайте новый комментарий.

Что-то вроде: «ВЫБЕРИТЕ созданный_ НА ОТНОШЕНИИ ОТВЕТА ГДЕ user_id = x »

Исходя из этого, я предполагаю, что вы храните комментарии в базе данных и у вас есть поле, содержащее время публикации.

0 голосов
/ 29 декабря 2011

Создайте 5 переменных в сеансе, содержащих время действий, и каждый раз, когда пользователь пытается опубликовать проверку, сначала проверьте, записаны ли все 5 и есть ли у всех данные, проверенное время.в течение часа с текущего времени, затем запретите доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...