Как реализуется задержка между добавлением комментариев?
Доброго времени суток! Подскажите пожалуйста как реализовать задержку между отправлением комментариев на сайте, подобная штука реализована в Wordpress, пожалуйста не гоните копошится в якобы открытом коде WP я пытался, но уровень моих знаний не позволил мне найти искомый код так как там уж очень длинная цепь.
Суть такова пользователь оставляет комментарий на сайте и тут же пытается оставить другой и в WP говорит подождите 15 секунд прежде чем оставить следующий комментарий, а так же есть оставить идентичный комментарий то он выдаст ошибку о дубликате.
На счет дубликата есть лишь мысль залезть в БД и проверить нет ли там идентичного комментария для этой записи (Без тревоги БД никак?)
на счет интервала тут не совсем уж ясно, если оставить пометку в сессиях или куках так они легло удаляются, как быть?
так если вы предлагаете ещё проверять в базе зачем тогда метка в сессии? Я ведь каждый раз буду вынужден дергать БД. И как собственно проверить интервал? пользователи не авторизованы, как же мне идентифицировать пользователя? брать по имени или по мылу последний комментарий смотреть его дату добавления и сравнивать с текущей?
ex3xeng: метка в сессии нужна чтобы не дергать базу. вначале в сессии/куках. для авторизованных или где мыло указывают потом с базой сравнивать (если проверку с сессией прошло)
Игорь: не пойму, вот пользователь(неавторизован) оставляет комментарий пошел POST запрос:
Каковы мои действия? это первая попытка
cookies/sessions пусто
значит сразу лезу в БД и вытаскиваю последний комментарий пользователя с (email + имя) или просто (email) не знаю даже как уникализировать и смотрю дату этого комментария если она скажем так больше чем текущее время + 1 минута, значит можно добавлять, а так же параллельно провести проверку на дубль комментария? Дальше что? $_SESSION['comment'] = now(); #пометил пользователя сессией
теперь вторая попытка и получается я сразу проверяю сессию? if (!empty($_SESSION['comment']) && $_SESSION['comment'] < now()) то опять та же проверка? ведь мне нужно проверить и на дубль? А если на дубль я бы не проверял то в случае условия TRUE я мог бы сразу публиковать?
какой то не логичный механизм) или я что то не понял?
эм) простите мне мое не знание, но ради расширения кругозора знаний.
подскажите или если не затруднит приведите элементарный пример или ссылку на реализацию данного метода.
простите за глупый вопрос но как получить hash? md5($user_name.$user_email.$user_comment); ? а если пользователь удалит сессию через консоль, с чем проверять? проверка пройдет так будто он добавляет свой первый комментарий?
Мда... Зачем Вам $user, $user_mail, $user_comment ?!!! Вы что проверяете?!
Вам нужно только избавиться от дубликата сообщения: md5($user_comment);
hash - это не крипт-защита! а просто экономия памяти при проверки дубликата.
ex3xeng: еще: если у Вас комментарии могут оставлять гости - то это не в какие ворота. А если это пользователь, то сохраните их в кэш-таблице сервера или в базе данных.
xmoonlight: почему не в какие ворота? на сайтах частенько вижу форму для отправки анонимных комментариев так сказать.
то что Вы писали выше, $_SESSION['hash'] = md5($user_comment); Пошел POST и я проверяю if ($_SESSION['hash'] == md5($user_comment)) die(дубликат);
разве стоит на это полагаться? а если пользователь удалит сессию через консоль то проверки будут проходить впустую? Объясните пожалуйста я что то не понимаю(
ex3xeng:
1. форму то Вы видите, а вот чтобы отправить - обычно делают регистрацию или авторизацию через OAuth (напр, соц.сети).
2. для гостей - кладите md5($_SERVER['REMOTE_ADDR'].$_SERVER['USER_AGENT'].$msg) в кэш сервера или в БД. (никаких куков! всё на сервере!)
Для гостей только 2 варианта, кука/сессия или IP. Ни то ни другое 100% гарантии не даст. Ип меняется, куку можно стереть. Короче это защита от "честных" гостей, кто захочет обойти, тот обойдет. Только авторизация спасает с высокой долей вероятности.
хм) а WP интересно как решили задачу, после отправки сообщения удалял все что сохраняет WP cookies + session все равно выдавало ошибку мол придержите коней(стандартная ошибка WP, когда необходимо подождать перед повторной оправкой)
тогда уж recaptcha 2 ставить что ли? она ведь не так раздражает пользователя как ввод символов?
Скорее всего тогда отслеживается IP, ну и есть еще Local Storage, возможно используются оба варианта. В цмс стараются учесть все варианты, т.к. это продукт нацеленный на готовое решение, и никто из пользователей не захочет разбираться какого лешего что-то там не работает.