意図しないフォームの再送信の防止
ページの更新によるフォームの再送信は、Web アプリケーションではよくある問題です。この問題を効果的に処理するには、次の戦略を採用することが重要です。
送信後にリダイレクト
同じページに応答を表示する代わりに、ユーザーをフォームが送信されると、別のページが表示されます。これにより、更新されたページが読み込まれるとき、それはすでに処理された POST リクエストの繰り返しではなく、新しい GET リクエストであることが保証されます。
例:
// submit // set success flash message (you are using a framework, right?) header('Location: /path/to/record'); exit;
ブラウザのキャッシュを無効にする
ブラウザがキャッシュを無効にするフォームをキャッシュするには、次のヘッダーを PHP スクリプトに追加します。
header('Cache-Control: no-cache, no-store, must-revalidate'); header('Pragma: no-cache');
Unique Page Token
フォーム送信ごとにサーバー上で一意のトークンを生成します。このトークンをフォームの非表示フィールドとして含め、処理前に検証してください。トークンが一致しない場合、またはトークンが見つからない場合は、リクエストを重複送信として破棄します。
例 (セッション トークンを使用):
<?php session_start(); // Generate a unique token and store it in the session $token = md5(uniqid(mt_rand(), true)); $_SESSION['token'] = $token; ?> <!DOCTYPE html> <html> <body> <form action="submit.php" method="post"> <input type="text" name="name"> <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="Submit"> </form> </body> </html>
<?php session_start(); // Get the submitted token $token = $_POST['token']; // Check if the token matches the session token if ($token != $_SESSION['token']) { // Discard the request } else { // Process the form data }
結論
これらのテクニックを実装することで、期限切れの不要なフォームの再送信を効果的に防ぐことができます。ページを更新して、Web アプリケーションが意図したとおりに動作することを確認します。
以上がWeb アプリケーションでの意図しないフォームの再送信を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。