推奨: 「PHP ビデオ チュートリアル 」
フォームを送信するときは、それを無視することはできませんこの制限は、ユーザーが送信ボタンを連打したり、攻撃者が悪意を持ってデータを送信したりする可能性があり、データの修正や追加など、データ送信後の処理でトラブルが発生する可能性があるため、ユーザーがフォームを繰り返し送信できないようにするためのものです。データベースに。
では、フォームが繰り返し送信される現象を回避するにはどうすればよいでしょうか? さまざまな側面から始めることができます:
まずフロントエンドを制限します。ボタンが 1 回クリックされるとフロントエンド JavaScript が無効になります。この方法は送信ボタンの複数回のクリックを防止するだけですが、ユーザーが JavaScript スクリプトを無効にすると機能しなくなるという欠点があります。
2 番目に、送信後にページをリダイレクトできます。つまり、送信後に新しいページにジャンプします。これにより、主に F5 キーによる送信の繰り返しが回避されますが、欠点もあります。
3 番目に、データベースは一意のインデックス制約を作成します。
4 番目は、セッション トークンの検証を行うことです。
次に、セッション トークンを使用してフォームの繰り返しの送信を防ぐ簡単な方法を見てみましょう。
フォームに入力非表示フィールド、つまり type="hidden" を追加します。その値はトークン値の保存に使用されます。ページが更新されると、トークン値が変更されます。送信後、トークンの値が正しいかどうかを判断し、フロントエンドで送信されたトークンがバックエンドで送信されたトークンと一致しない場合は、重複送信とみなされます。
< ?php / PHP简单利用token防止表单重复提交 */ session_start(); header("Content-Type: text/html;charset=utf-8"); function set_token() { $_SESSION['token'] = md5(microtime(true)); } function valid_token() { $return = $_REQUEST['token'] === $_SESSION['token'] ? true: false; set_token(); return $return; } //如果token为空则生成一个token if(!isset($_SESSION['token']) || $_SESSION['token']=='') { set_token(); } if(isset($_POST['web'])){ if(!valid_token()){ echo "token error,请不要重复提交!"; }else{ echo '成功提交,Value:'.$_POST['web']; } }else{ ?> } ?>
上記は、フォームの繰り返しの送信を防ぐための簡単な例です。
実際のプロジェクト開発では、フォーム トークンはより複雑に処理されます。これをトークン検証と呼びます。可能な処理には、ソース ドメイン、つまりオリジンの検証、それが外部送信であるかどうか、実行されるアクションの照合、追加、変更、削除のいずれかが含まれます。2 番目に最も重要なことは、トークンの構築です。可逆暗号化アルゴリズムを使用できますが、平文はまだ安全ではないため、複雑になる可能性があります。