Как лучше всего сделать защиту от отправки одинаковых сообщений подряд? Я думаю что посчитать хэш (md5 или sha1) из заголовка и тела сообщения - и если хэш сходится то показывать пользователю ошибку. Или есть более грамотные способы?
Вопрос а зачем, а точней какие цели вы преследуете. Если хотите защитится от спама, то пожалуйста Google reCaptcha вам в помощь
Вангую, хочет "защититься" от нечаянной повторной отправки формы по F5, ибо никакого рефреша после апдейта не делает. --- Добавлено --- Если я прав, то решение такое: PHP: // ... сделали всё что надо, сохранили, затем header('Location: '.$_SERVER['PHP_SELF']); die;
Двойная цель - от повторной отправки при нажатии формы. И от спама одинаковых сообщений (при условии что капча пройдена, ну просто что бы не загаживать одними и теме же сообщениями, и злостный спаммер что бы хотя бы потрудился текст поменять). По преведенному примеру - правильно понимаю - что в данном случае - мы делаем редирект на туже самую страницу. header('Location: '.$_SERVER['PHP_SELF']); И у нас форма уже пустая будет. Просто в чем лучше данного способа чем например редирект на сообщение - ваше сообщение успешно отправленно? Да и как будет если пользователь нажнем кнопку - назад в браузере?
Дело хозяйское, но как модератор этого форума могу сказать, что это нетипично. Так не загаживают. А ботов тут проходит видимо-невидимо! Тем более что спамоботу ничего не стоит, вобщем-то, слегка менять текст. ИМХО, овчинка выделки не стоит. А вот делать редирект после записи — это хорошая практика.
@glorsh66 Ещё момент, если отправляете форму асинхронно через ajax на javascript, то не забудьте после успешной отправки очистить форму средствами javascript. --- Добавлено --- Код (Javascript): document.myForm.reset();
Интересная статья - только вот не понял последней фразы If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued. user agent MUST NOT automatically redirect the request unless it can be confirmed by the user - что тут имется ввиду, если мы как раз и делаем редирект? Или имеется ввиду - про сам бразер - что после получения ответа - 302 пока ему не придет комманда на редирект с сервера? А это спасет от ситуации например - у пользователя отвалился интернет и он повторно шлет? Кстати - как как модератор - как от ботов защищаться кроме каптч и секретных вопросов и т.д. В какой то "умной" книжке читал еще что можно выключить кнопку после посыла запроса☻
Редирект делаем не мы, а браузер. Мы только заголовок отправляем. Здесь говорится, что если клиент получил 302 статус после запроса любым методом кроме GET и HEAD, то он не обязан делать его сразу, а может спросить у пользователя. На практике таких браузеров, которые бы у меня это спрашивали, я не встречал.
Первые комменты к статье по ссылки прочтите. Нет таких браузеров, поэтому спокойно делаем 302. P.S. Там еще есть заморочка вроде того, делать редирект тем же методом или методом GET. Тоже спокойно используем 302, получая в результате GET вне зависимости от того, что написано в спеках. --- Добавлено --- @glorsh66, спам в 99,99% автоматический, а боты плевать хотели на все эти приблуды, там используются немного др. техники.