ユーザーが何度もフォームを送信するのを防ぐ方法まとめ
フォームの重複送信は、マルチユーザーのWebアプリケーションで最も一般的かつ厄介な問題の1つです。重複投稿が発生するアプリケーションのシナリオは、次のようなものが多くあります。
送信ボタンを2回クリックする。更新ボタンをクリックする。ブラウザの戻るボタンで直前の操作を繰り返し、フォームが重複して送信された場合。ブラウザの履歴を使用して、繰り返しフォームを送信する。ブラウザからのHTTPリクエストを繰り返す。
フォームの重複投稿を防ぐためのいくつかの方法
1. 送信ボタンを無効にする 送信ボタンを無効化します。Javascriptを使用して、フォームが送信された後に送信ボタンを無効にします。この方法は、不安なユーザーが何度もボタンをクリックすることを防ぎます。しかし、問題があります。クライアントがJavascriptを無効にしている場合、この方法は機能しません。
前回の記事では、いくつかのJqueryプラグインを使用するとうまくいくと書きました。
2. ポスト/リダイレクト/ゲットモード . 投稿後にページリダイレクトを行うことは、Post-Redirect-Get (PRG) パターンと呼ばれています。要するに、ユーザーがフォームを送信した後に、クライアントサイドで送信成功メッセージページへのリダイレクトを実行しに行くのです。
これにより、ユーザーがF5キーを押したことによる重複投稿を回避し、ブラウザのフォーム重複投稿警告や、ブラウザを前後に押したことによる同様の問題を回避することができます。
3. セッションに特別なフラグを格納する . フォームページが要求されると、特殊文字のフラグ文字列が生成されてセッションに格納され、またフォームの隠しフィールドに配置されます。フォームのデータが処理に受け入れられると、フラグ文字列の存在が確認され、直ちにセッションから削除され、その後データが正常に処理される。
フォーム送信時に有効なフラグ文字列が見つからない場合は、すでにフォームが送信されていることを意味し、その送信は無視されます。
これにより、Webアプリケーションはより高いレベルのXSRF保護を受けることができます。
4. データベースに制約を追加する。 データの重複を防ぐために、データベースに一意制約を追加したり、一意インデックスを作成します。これは、重複データの送信を防ぐために最も効果的な方法です。
以上、4つの方法を紹介しましたが、もっと良い解決方法があれば、教えてください。
関連
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
htmlの親子iframeで双方向にメッセージを送信する例
-
htmlのheaderタグの使い方を説明する
-
Html/Css(初めての方必見攻略法)
-
IE8との互換性について。X-UA-Compatibleプロパティの説明
-
Adobe Bracketsの簡単な使い方のグラフィックチュートリアル
-
テーブル関連の仕上げとJavascriptによるtable,tr,tdの操作について
-
bodyの属性 bodyタグの主な属性をまとめてみました。
-
dl,dt,ddはどのような場合に使用するのが適切ですか?
-
HTMLのテーブルタグと関連する改行の問題を徹底分析
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン