Aktueller Standort: Startseite> Neueste Artikel> PHP implementiert die Anti-Shake-Funktion: zwei Möglichkeiten, um eine wiederholte Einreichung von Formularen effektiv zu vermeiden

PHP implementiert die Anti-Shake-Funktion: zwei Möglichkeiten, um eine wiederholte Einreichung von Formularen effektiv zu vermeiden

M66 2025-06-23

Was ist Anti-Shake-Funktion und ihre Bedeutung

Die Anti-Shake-Funktion bezieht sich auf die Tatsache, dass, wenn der Benutzer ein Ereignis mehrmals schnell auslöst, die Ereignisbearbeitungsfunktion nur einmal ausgeführt werden darf und die Wiederaussetzung innerhalb eines Zeitraums nach dem letzten Auslöser verhindert wird. In der Webentwicklung ist es sehr wichtig, dass Benutzer wiederholt Formulare einreichen, da wiederholte Einsendungen zu Datenredenz, erhöhter Serverbelastung und sogar logischen Fehlern führen können.

Methode 1: Verwenden Sie die Sitzung, um Zeitstempel aufzuzeichnen, um Anti-Shake zu erreichen

Ein einfacher und effektiver Weg besteht darin, die Sitzung zu verwenden, um den Zeitstempel der letzten Einreichung des Benutzers aufzuzeichnen und festzustellen, ob die Einreichung durch Vergleich des Intervalls zwischen der aktuellen Zeit und der letzten Einreichungszeit zulässig ist. Das folgende Beispiel zeigt die spezifische Implementierung:

// Sitzung einschalten
Session_Start ();
<p>// Erhalten Sie den aktuellen Zeitstempel<br>
$ currentTimestamp = time ();</p>
<p>// Holen Sie sich den Zeitstempel der letzten eingereichten<br>
$ lastTimestamp = $ _Session [&#39;lastTimestamp&#39;] ?? 0;</p>
<p>// Bestimmen Sie, ob das Zeitintervall geringer ist als die angegebene Anti-Shake-Zeit (z. B. 5 Sekunden)<br>
if ($ currentTimestamp - $ lastTimestamp <5) {<br>
echo &#39;Bitte wiederholen Sie die Einreichung nicht&#39;;<br>
Ausfahrt;<br>
}</p>
<p>// Aktualisieren Sie den letzten Zeitstempel der Einreichung<br>
$ _Session [&#39;lastTimestamp&#39;] = $ currentTimestamp;<br>

Dieser Code vermeidet, dass Benutzer in kurzer Zeit wiederholt Formulare einreichen, indem er feststellt, ob das zwei Einreichungszeitintervall geringer ist als der festgelegte Wert. Stellen Sie bei der Verwendung sicher, dass das Skript beginnt, Session_Start () aufzurufen, um die Sitzungsunterstützung zu aktivieren.

Methode 2: Verwenden Sie den Token -Mechanismus, um wiederholte Einsendungen zu verhindern

Eine weitere sicherere Anti-Shake-Methode ist die Verwendung von Token. Jedes Mal, wenn das Formular gerendert wird, wird in der Sitzung ein einzigartiger Token erzeugt, gespeichert und in der Form als verstecktes Feld platziert. Bei der Übermittlung überprüfen der Hintergrund, ob das Token übereinstimmt, wodurch festgelegt wird, ob es sich um eine doppelte Einreichung handelt.

// Sitzung einschalten
Session_Start ();
<p>// generieren Sie ein einzigartiges Token<br>
$ token = md5 (uniqid (rand (), true));</p>
<p>// Speichern Sie das Token in der Sitzung<br>
$ _Session [&#39;token&#39;] = $ token;</p>
<p>// Token in der Form passieren<br>
echo &#39;<input type="hidden" name="token" value="' . $token . '"> &#39;;</p>
<p>// Überprüfen Sie das Token bei der Verarbeitung der Einreichung des Formulars<br>
if ($ _post [&#39;token&#39;]! == $ _session [&#39;token&#39;]) {<br>
echo &#39;Bitte wiederholen Sie die Einreichung nicht&#39;;<br>
Ausfahrt;<br>
}</p>
<p>// Verarbeiten Sie die Form von Formular weiter<br>
// ...<br>

Diese Methode verhindert effektiv, dass Formulare wiederholt übermittelt werden und ist schwer zu fälschen. Geeignet für Szenarien, in denen ein strengerer Datenschutz erforderlich ist.

Zusammenfassen

Durch die beiden Methoden der Sitzungsstempelsteuerung und der Token-Überprüfung können PHP-Entwickler die Anti-Shake-Funktion flexibel implementieren, um Probleme effektiv zu vermeiden, die durch die wiederholte Einreichung von Formularen durch Benutzer verursacht werden. Welcher spezifische Auswahlplan kann gemäß den tatsächlichen Projektanforderungen und Sicherheitsanforderungen angepasst werden. Hoffentlich können die oben genannten Beispiele eine praktische Referenz für Ihre Projektentwicklung liefern.