Ich habe eine Technik entwickelt, die das Übermitteln von doppelten Formularen verhindert, indem Sie die Seite zurück-/vorblättern oder die Seite aktualisieren. Und ich dachte darüber nach, es hier zu tun, ich habe bereits eine Probe nicht in der Produktionsumgebung getestet, was sind Fehler, die Sie identifizieren können?Doppelte Formulareinreichungen verhindern
Bitte beachten Sie, dass mir Form-Tokens bekannt sind, die Sie vor CSRF-Angriffen schützen und nicht in den folgenden Schritten hinzugefügt wurden.
Erzeugen Sie Formular-ID für jede Form, und es als verstecktes Feld im Formular:
$formid = microtime(true)*10000;
- On Form einreichen:
Validate von Daten
Berechnen Sie den Hash der Formularfelder Daten
$allvals = ''; foreach($_POST as $k=>$v){ $allvals .= $v; } $formHash = sha1($allvals);
Überprüfen Sie den Hash-Wert des Formulars, indem Sie ihn mit zuvor gespeicherten Hashwerten vergleichen. Der Sitzungswert wird an jede Form durch die Variable $ formid gebunden.
$allowAction = true; if(isset($_SESSION['formHash'][$_POST['formid']]) && ($_SESSION['formHash'][$_POST['formid']] == $formHash)){ $allowAction = false; }
- Wenn der Formular-Hash nicht gefunden wurde, bedeutet dies, dass das Formular zum ersten Mal eingereicht oder die Formulardaten geändert wurden.
Wenn Daten (zur Datenbank, zum Beispiel) gespeichert, Form Hash-Sitzung speichern:
$_SESSION['formHash'][$_POST['formid']] = $formHash;
Vollversion des Codes: http://thebusy.me/2011/01/06/preventing-duplicate-form-submissions/
Betrachten Sie Ihre Hash-Schnipsel gegen '$ formHash = SHA1 (serialisiert ($ _ POST)) Benchmarking;'. Es wird auch Hash-Tasten, die möglicherweise oder nicht vorteilhaft sein. – Dan
Möglicherweise/dup Zusammenhang, http://stackoverflow.com/questions/4614052/how-to-prevent-multiple-form-submission-on-multiple-clicks-in-php/4614310#4614310 – user562374
Mögliche Duplikat http://stackoverflow.com/questions/218907/how-to-handle-multiple-submissions-server-side –