Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie das Sitzungstoken in PHP, um die wiederholte Übermittlung von Ajax-Formularen zu verhindern

Verwenden Sie das Sitzungstoken in PHP, um die wiederholte Übermittlung von Ajax-Formularen zu verhindern

伊谢尔伦
伊谢尔伦Original
2016-12-01 11:30:172031Durchsuche

Es gibt zwei Hauptmethoden, um die wiederholte Übermittlung von Formularen zu verhindern:

1) Durch Umleitung (Nicht-Ajax-Formularübermittlung)

2) Durch Sitzungstoken (Sitzungstoken)

Wenn der Client eine Seite anfordert, generiert der Server eine Zufallszahl, platziert die Zufallszahl in der Sitzung und sendet die Zufallszahl dann an den Client. Wenn der Client zum ersten Mal übermittelt, wird die Zufallszahl angezeigt An den Server gesendet, empfängt der Server die Zufallszahl und vergleicht sie mit der in der Sitzung gespeicherten Zufallszahl. Zu diesem Zeitpunkt sind die beiden Werte gleich. Der Server betrachtet es als die erste Übermittlung und aktualisiert sie Zufallswert auf der Serverseite; Wenn die Übermittlung zu diesem Zeitpunkt erneut durchgeführt wird, ist die vom Client an den Server gesendete Zufallszahl immer noch dieselbe, aber die Zufallszahl auf dem Server hat sich geändert , betrachtet der Server dies als eine wiederholte Übermittlung.

Generieren Sie eine Zufallszahl und verschlüsseln Sie sie mit md5:

$_token = md5(microtime()+rand(1,10000));
$_SESSION['_token'] = $_token;

Senden Sie den Wert an den Client und übermitteln Sie ihn als verstecktes Feld im Formular:

<input type="hidden" value="<?php echo $_token;?>" name="_token"/>

Vergleichen Sie dann beim Senden die übermittelten Daten mit den Daten in der Serversitzung. Wenn sie leer oder ungleich sind, wird dies als illegaler Vorgang betrachtet:

if(!isset($_POST(&#39;_token&#39;))){
    echo json_encode(array(&#39;status&#39;=>&#39;failed&#39;,&#39;msg&#39;=>&#39;非法操作!&#39;));
    exit();
}
if(isset($_POST[&#39;_token&#39;]) && $_POST[&#39;_token&#39;]!=$_SESSION[&#39;_token&#39;]){
    echo json_encode(array(&#39;status&#39;=>&#39;failed&#39;,&#39;msg&#39;=>&#39;表单只能提交一次,不能重复提交!&#39;));
    exit();
}


Stellungnahme:
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