ホームページ  >  記事  >  バックエンド開発  >  Ajax フォームの繰り返し送信を防ぐために PHP でセッション トークンを使用する

Ajax フォームの繰り返し送信を防ぐために PHP でセッション トークンを使用する

伊谢尔伦
伊谢尔伦オリジナル
2016-12-01 11:30:172033ブラウズ

フォームの繰り返し送信を防ぐ主な方法は 2 つあります:

1) リダイレクト経由 (非 Ajax フォーム送信)

2) セッション トークン経由 (セッション トークン)

クライアントがページをリクエストすると、サーバーは乱数を作成し、その乱数をセッションに配置し、その乱数をクライアントに送信します。クライアントが初めて送信する場合は、乱数がサーバーに送信され、サーバーがその乱数を受信します。サーバーに保存されている乱数を比較します。このとき、サーバーはそれを最初の送信とみなし、サーバー側で乱数を更新します。この時点で再度送信されると、クライアントは乱数をサーバーに送信しますが、乱数は以前と同じですが、サーバー側の乱数が異なる場合、サーバーはこれを次のようにみなします。繰り返し提出されることになります。

乱数を生成し、md5で暗号化します:

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

値をクライアントに送信し、フォームの隠しフィールドとして送信します:

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

次に、送信時に送信されたデータをサーバーセッションのデータと比較します。空であるか等しくない場合、不正な操作とみなされます:

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();
}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。