Web アプリケーションでの意図しないフォームの再送信を防ぐにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-13 00:43:02
オリジナル
505 人が閲覧しました

How Can I Prevent Unintended Form Resubmission in Web Applications?

意図しないフォームの再送信の防止

ページの更新によるフォームの再送信は、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 サイトの他の関連記事を参照してください。

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