Die Formularübermittlung kann manchmal unbeabsichtigt mehrmals hintereinander ausgelöst werden, was zu unerwünschtem Verhalten und Dateninkonsistenzen führt. Diese Situation kann aufgrund verschiedener Faktoren entstehen, z. B. aufgrund mehrerer Klicks auf eine Schaltfläche oder einer langsamen Formularverarbeitung. PHP bietet Techniken, um solche Mehrfachübermittlungen zu verhindern und so die Datenintegrität sicherzustellen.
Um Mehrfachübermittlungen zu verhindern, besteht ein weit verbreiteter Ansatz darin, ein Token zu verwenden, das jedes Mal generiert wird, wenn ein Formular angezeigt wird. Dieses Token wird dann mit dem Formular übermittelt und serverseitig validiert. Der entscheidende Vorteil dieses Ansatzes liegt in seinem Potenzial, sowohl CSRF-Angriffe (Cross-Site Request Forgery) als auch Replay-Angriffe abzuschwächen.
Das folgende Beispiel zeigt die Erstellung eines Unikats Token für jede Formularanzeige, zusammen mit seiner Validierung bei der Formularübermittlung.
<?php session_start(); /** * Generates a unique token for the form * @return string The token */ function getToken(){ $token = sha1(mt_rand()); if(!isset($_SESSION['tokens'])){ $_SESSION['tokens'] = array($token => 1); } else{ $_SESSION['tokens'][$token] = 1; } return $token; } /** * Validates the token and removes it from the list of valid tokens * @param string $token The token * @return bool Validation status */ function isTokenValid($token){ if(!empty($_SESSION['tokens'][$token])){ unset($_SESSION['tokens'][$token]); return true; } return false; } // Check if a form has been submitted $postedToken = filter_input(INPUT_POST, 'token'); if(!empty($postedToken)){ if(isTokenValid($postedToken)){ // Process form } else{ // Handle error } } // Get a token for the currently displayed form $token = getToken(); ?> <form method="post"> <fieldset> <input type="hidden" name="token" value="<?php echo $token; ?>"/> <!-- Form content --> </fieldset> </form>
Die Kombination des tokenbasierten Ansatzes mit einer Umleitung verbessert die Benutzererfahrung, indem eine ordnungsgemäße Bereitstellung sichergestellt wird Rückwärts- und Vorwärtsnavigationsverhalten. Durch die Implementierung des POST-/Redirect-/GET-Entwurfsmusters können Sie eine versehentliche erneute Übermittlung verhindern, wenn der Benutzer auf die Schaltfläche „Zurück“ klickt oder die Seite aktualisiert.
Das obige ist der detaillierte Inhalt vonWie verhindert man die mehrfache Formularübermittlung in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!