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

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

伊谢尔伦
リリース: 2023-03-02 18:04:01
オリジナル
2099 人が閲覧しました

フォームの繰り返し送信を防ぐ主な方法は 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();
}
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート