Heim >Backend-Entwicklung >PHP-Tutorial >ThinkPHP-Methode zur Verhinderung wiederholter Formularübermittlung, Beispielanalyse, PHP-Beispiel
In diesem Artikel wird hauptsächlich die Methode von ThinkPHP zur Verhinderung der wiederholten Übermittlung von Formularen vorgestellt. Er analysiert verschiedene gängige Betriebstechniken und die damit verbundenen Vorsichtsmaßnahmen von thinkPHP, um die wiederholte Übermittlung von Formularen in Form von Beispielen zu verhindern
Dieser Artikel fasst die Methode von ThinkPHP zur Verhinderung wiederholter Formularübermittlungen anhand von Beispielen zusammen und analysiert sie. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Warum gibt es doppelte Formulare?
Während der Entwicklung, wenn ein neues oder Für das geänderte Formular legen wir nach Abschluss des Datenbankvorgangs im Hintergrund fest, ob zu anderen Seiten gesprungen oder zu dieser Seite zurückgekehrt werden soll. Zu diesem Zeitpunkt wird das Formular durch Klicken auf die Zurück-Schaltfläche des Browsers vor dem Absenden oder Aktualisieren der Seite angezeigt wiederholt eingereicht werden, d. h. dieser Datensatz wird zweimal hinzugefügt oder geändert.
Der Grund, warum das Formular wiederholt gesendet wird, besteht darin, dass das zum ersten Mal gesendete Formular im Speicher zwischengespeichert wird und nicht verschwindet, bis die Seite das nächste Mal gesendet oder die Seite geschlossen oder auf eine andere umgeleitet wird Seiten. Wenn der Selbstaufruf zurückkehrt, sind die Daten im Speicher noch vorhanden. Zu diesem Zeitpunkt kann der übermittelte Code auf der Seite den übermittelten Wert noch erkennen, was den Effekt einer wiederholten Übermittlung verursacht.
Wie löst man das Problem?
Um Online-Lösungen und eigene Tests zusammenzufassen, können Sie die folgenden Methoden verwenden:
Methode 1: Die einfachste: nach dem Absenden der Seite Gehen Sie zu einer anderen Seite anstelle dieser Seite. Ihre Seitenadresse lautet beispielsweise
http://yourdomain.com/User/Index/login
Dann das Formular Die Aktionsadresse der Seite kann eine andere Verarbeitungsadresse sein, z. B.
780f4b3c36ad706762deaa6d9e27b237
. Auf diese Weise wird ein Fehler zurückgegeben oder der Benutzer klickt auf die Schaltfläche „Zurück“ und fährt fort kehrt zur vorherigen Adresse zurück, aber diese Situation ist nicht sicher. Es ist auch notwendig, Methode 2 abzugleichen, um gemeinsam sicherer zu sein
Methode 2: Nach dem Absenden des Formulars wird die Schaltfläche „Senden“ grau/versteckt die Schaltfläche „Senden“
Diese Methode Wird normalerweise mit Methode 1 kombiniert. Sie verwenden JS, um die Klickaktion des Benutzers dynamisch zu überwachen und das Schaltflächenattribut dynamisch auf „Disabled“ zu setzen, was bedeutet, dass es grau und nicht verfügbar ist. Der Code lautet wie folgt:
HTML:
<form action="{:U('User/Index/check_login')}" method="post"> <input type="text" name="username" value="" id="username" /> <input type="password" name="userpwd" id="userpwd" /> <input type="submit" name="login_btn" id="login_btn" value="登陆"/> </form>
JS:
$().ready(function(){ $("#login_btn").on('click',function(){ $(this).attr('disabled',true); }); });
Nach der Kombination von Methode 1 + Methode 2 können im Grunde mehr als 90 % der Probleme mit wiederholten Einreichungen gelöst werden, aber Liu möchte immer noch über die dritte Methode sprechen, die darin besteht, dieses Problem ein für alle Mal zu lösen Server
Methode 3: Verwenden Sie die Methode zum Ausblenden zufälliger TOKEN-Werte, um wiederholte Übermittlungen zu ermitteln
Fügen Sie zunächst die folgende Methode hinzu Projektfunktionen.php
//创建TOKEN function createToken() { $code = chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)); session('TOKEN', authcode($code)); } //判断TOKEN function checkToken($token) { if ($token == session('TOKEN')) { session('TOKEN', NULL); return TRUE; } else { return FALSE; } } /* 加密TOKEN */ function authcode($str) { $key = "YOURKEY"; $str = substr(md5($str), 8, 10); return md5($key . $str); }
Füllen Sie den folgenden HTML-Code in das Formularseitenformular ein
HTML:
568115841160b81a8386efa13ad3ccf5
Rufen Sie die Methode creatToken()
auf, um ein Token zu generieren, bevor die Seite angezeigt wird, und verwenden Sie checkToken()
in der entsprechenden Controller-POST-Anfrage, um zu bestimmen, ob
if(IS_POST) { $post_token = I('post.TOKEN'); if(!checkToken($post_token)){ $this->error('请不要重复提交页面',U('User/Index/login')); } }Grundsätzlich können Sie diese drei Methoden zusammen verwenden, um das Problem der wiederholten Formularübermittlung in der ThinkPHP-Entwicklung zu lösen. Natürlich sagten einige Studenten, dass Sie den Token-Ring-Mechanismus von ThinkPHP verwenden können, der tatsächlich einfacher ist TP generiert standardmäßig ein verstecktes Feld im Formular. Anschließend kann beurteilt werden, ob dieses versteckte Feld vorhanden ist und ob es mit dem Wert in der Sitzung übereinstimmt.
PS:Heute habe ich den Inhalt endlich mit dem Markdown-Editor von Jianshu gepostet. Tatsächlich wurde die Markdown-Syntax nicht abgedeckt und das gesamte Layout war erfrischend, nicht schlecht.
Artikel, die Sie interessieren könnten:Analyse von PHP-Paginierungsanzeigemethoden [mit PHP-allgemeinen Paging-PHP-Tipps
Beispiel einer PHP-Methode zum Komprimieren der Bildgröße und Konvertieren in das JPG-Format_php-Tipps
Beispiel einer PHP-Methode zur Verwendung der PDO-Abstraktionsschicht zum Erhalten von Abfrageergebnissen. PHP-Tipps
Das obige ist der detaillierte Inhalt vonThinkPHP-Methode zur Verhinderung wiederholter Formularübermittlung, Beispielanalyse, PHP-Beispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!