Я придумал технику, чтобы предотвратить повторную подачу формы, возвращая/переместив или обновив страницу. И я подумал о том, чтобы судить об этом здесь, я уже тестировал образец не в производственной среде, какие недостатки вы можете идентифицировать?Предотвращение повторных представлений формы
Обратите внимание, что мне хорошо известно использование форм-токенов, которые защитят вас от атак CSRF и не будут добавлены в следующие шаги.
-Generate Форма ID для каждой формы, и использовать его как скрытое поле в форме:
$formid = microtime(true)*10000;
- На форме представить:
Validate из данных
Рассчитать хэш данных полей формы
$allvals = ''; foreach($_POST as $k=>$v){ $allvals .= $v; } $formHash = sha1($allvals);
Подтвердить форму хеша по сравнению с ранее сохраненными хэшами. значение сеанса привязывается к каждой форме переменной $ formid.
$allowAction = true; if(isset($_SESSION['formHash'][$_POST['formid']]) && ($_SESSION['formHash'][$_POST['formid']] == $formHash)){ $allowAction = false; }
- Если форма hash не была найдена, значит, это первая форма, представленная или данные формы изменены.
Если данные сохраняются (в базу данных, например), сохранить форму хэш сессии:
$_SESSION['formHash'][$_POST['formid']] = $formHash;
Полная версия кода: http://thebusy.me/2011/01/06/preventing-duplicate-form-submissions/
Рассмотрим сравнительный анализ хеш-фрагмента против '$ formHash = sha1 (serialize ($ _ POST));'. Это тоже ключи хеширования, которые могут или не могут быть полезными. – Dan
Возможно, связано/dup, http://stackoverflow.com/questions/4614052/how-to-prevent-multiple-form-submission-on-multiple-clicks-in-php/4614310#4614310 – user562374
Возможный дубликат http://stackoverflow.com/questions/218907/how-to-handle-multiple-submissions-server-side –