Я придумал метод предотвращения дублирования отправки формы путем перехода назад / вперед или обновления страницы. И я подумал о том, чтобы обсудить это здесь, я уже протестировал образец не в производственной среде, какие недостатки вы можете выявить?
Обратите внимание, что я хорошо знаю об использовании токенов форм, которые защитят вас от атак CSRF, и разве t добавлен на шагах ниже.
-Создайте идентификатор формы для каждой формы и используйте его как скрытое поле в форме:
$formid = microtime(true)*10000;
- При отправке формы :
Подтвердить на основе данных
Вычислить хеш полей формы данные
$ allval = '';
foreach ($ _ POST as $ k => $ v) {
$ allval. = $ v;
}
$ formHash = sha1 ($ allval);
Подтвердить хэш формы путем сравнения с ранее сохраненными хэшами. значение сеанса привязано к каждой форме переменной $ formid.
$ allowAction = true;
if (isset ($ _ SESSION ['formHash'] [$ _ POST ['formid']]) && ($ _SESSION ['formHash'] [$ _ POST ['formid']] == $ formHash)) {
$ allowAction = false;
}
Если данные сохранены (например, в базе данных), сохранить хэш формы в сеансе:
$ _ SESSION ['formHash'] [$ _ POST ['formid']] = $ formHash;
Полная версия кода: http://thebusy.me/2011/01/06/preventing-duplicate-form-submissions/