1. ホーム
  2. Web制作
  3. HTML/Xhtml

ユーザーが何度もフォームを送信するのを防ぐ方法まとめ

2022-01-09 02:47:40

フォームの重複送信は、マルチユーザーのWebアプリケーションで最も一般的かつ厄介な問題の1つです。重複投稿が発生するアプリケーションのシナリオは、次のようなものが多くあります。

送信ボタンを2回クリックする。更新ボタンをクリックする。ブラウザの戻るボタンで直前の操作を繰り返し、フォームが重複して送信された場合。ブラウザの履歴を使用して、繰り返しフォームを送信する。ブラウザからのHTTPリクエストを繰り返す。

  フォームの重複投稿を防ぐためのいくつかの方法

1. 送信ボタンを無効にする 送信ボタンを無効化します。Javascriptを使用して、フォームが送信された後に送信ボタンを無効にします。この方法は、不安なユーザーが何度もボタンをクリックすることを防ぎます。しかし、問題があります。クライアントがJavascriptを無効にしている場合、この方法は機能しません。

  前回の記事では、いくつかのJqueryプラグインを使用するとうまくいくと書きました。

2. ポスト/リダイレクト/ゲットモード . 投稿後にページリダイレクトを行うことは、Post-Redirect-Get (PRG) パターンと呼ばれています。要するに、ユーザーがフォームを送信した後に、クライアントサイドで送信成功メッセージページへのリダイレクトを実行しに行くのです。

  これにより、ユーザーがF5キーを押したことによる重複投稿を回避し、ブラウザのフォーム重複投稿警告や、ブラウザを前後に押したことによる同様の問題を回避することができます。

3. セッションに特別なフラグを格納する . フォームページが要求されると、特殊文字のフラグ文字列が生成されてセッションに格納され、またフォームの隠しフィールドに配置されます。フォームのデータが処理に受け入れられると、フラグ文字列の存在が確認され、直ちにセッションから削除され、その後データが正常に処理される。

  フォーム送信時に有効なフラグ文字列が見つからない場合は、すでにフォームが送信されていることを意味し、その送信は無視されます。

  これにより、Webアプリケーションはより高いレベルのXSRF保護を受けることができます。

4. データベースに制約を追加する。 データの重複を防ぐために、データベースに一意制約を追加したり、一意インデックスを作成します。これは、重複データの送信を防ぐために最も効果的な方法です。

以上、4つの方法を紹介しましたが、もっと良い解決方法があれば、教えてください。