繰り返されるフォームの提出は、マルチユーザーWebアプリケーションで最も一般的な問題であり、多くのトラブルを引き起こします。次のような重複した提出問題に遭遇する多くのアプリケーションシナリオがあります。
[送信]ボタンを2回クリックします。 [更新]ボタンをクリックします。ブラウザバックボタンを使用して以前のアクションを繰り返し、フォームの繰り返しの提出を行います。ブラウザの履歴を使用して、提出フォームを繰り返します。ブラウザから繰り返しHTTP要求。
フォームの繰り返しの提出を防ぐためのいくつかの方法
1.送信ボタンを無効にします。 JavaScriptを使用して、フォームが送信された後に送信ボタンを無効にします。この方法では、焦られたユーザーが複数回ボタンをクリックすることを防ぎます。しかし、問題があります。クライアントがJavaScriptを禁止する場合、この方法は無効になります。私の以前の記事では、いくつかのjQueryプラグインを使用するとうまく機能すると述べています。
2.post/redirect/getモード。提出後にページリダイレクトを実行します。これは、ポストリダイレクト(PRG)モードと呼ばれます。要するに、ユーザーがフォームを送信すると、クライアントのリダイレクトを実行し、提出成功情報ページに移動します。これにより、ユーザーがF5を押すことによって引き起こされる繰り返しの提出を避けることができ、ブラウザフォームの繰り返し提出の警告はありません。また、ブラウザの順方向とバックプレーションによって引き起こされる同じ問題を排除することもできます。
3.セッションに特別なロゴを保存します。フォームページが要求されると、特別な文字フラグ文字列が生成されます。これはセッションに存在し、フォームの隠されたフィールドに配置されます。処理フォームデータを受け入れるときは、識別文字列が存在するかどうかを確認し、すぐにセッションから削除し、データを正常に処理します。フォームの提出に有効なフラグ文字列がないことがわかった場合、フォームが送信され、この提出が無視されていることを意味します。
これにより、Webアプリケーションがより高度なXSRF保護を提供します。
4.データベースに制約を追加します。データベースに一意の制約を追加するか、データの重複を防ぐために一意のインデックスを作成します。これは、データの繰り返しの提出を防ぐ最も効果的な方法です。上記は、これらの4つの方法の紹介です。より良い解決策がある場合は、教えてください。この記事は継続的に更新されます。