Heim > Backend-Entwicklung > PHP-Tutorial > Wie verhindert man die mehrfache Formularübermittlung in PHP?

Wie verhindert man die mehrfache Formularübermittlung in PHP?

Susan Sarandon
Freigeben: 2024-11-10 06:43:02
Original
544 Leute haben es durchsucht

How to Prevent Multiple Form Submissions in PHP?

Bekämpfung mehrerer Formularübermittlungen in PHP bei mehreren Klicks

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.

Verhindern mehrfacher Formularübermittlungen

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.

Ein praktisches Beispiel

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>
Nach dem Login kopieren

Verbesserung der Benutzererfahrung durch Umleitung

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage