ユーザーがフォームを繰り返し送信するのを防ぐ方法の概要

ユーザーがフォームを繰り返し送信するのを防ぐ方法の概要

重複したフォーム送信は、マルチユーザー Web アプリケーションで最も一般的で厄介な問題です。重複送信の問題が発生する可能性があるアプリケーション シナリオは多数あります。たとえば、次のようになります。

[送信] ボタンを 2 回クリックします。 「更新」ボタンをクリックします。 ブラウザの戻るボタンを使用して前の操作を繰り返すと、フォームの送信が重複して発生します。 ブラウザの履歴を使用して、フォームを繰り返し送信します。 ブラウザは HTTP リクエストを繰り返します。

フォームの重複送信を防ぐいくつかの方法

1. 送信ボタンを無効にします。フォームが送信された後に送信ボタンを無効にするには、Javascript を使用します。このアプローチにより、せっかちなユーザーがボタンを複数回クリックするのを防ぐことができます。しかし、問題があります。クライアントが Javascript を無効にしている場合、このメソッドは無効になります。

前回の記事で、いくつかの Jquery プラグインを使用すると良い効果が得られる可能性があると述べました。

2.Post/Redirect/Getモード。送信後にページ リダイレクトを実行することを、Post-Redirect-Get (PRG) パターンと呼びます。つまり、ユーザーがフォームを送信すると、送信成功情報ページへのクライアント側リダイレクトが実行されます。

これにより、ユーザーが F5 キーを押すことで発生する繰り返しの送信を回避でき、ブラウザー フォームを繰り返し送信しても警告が表示されなくなります。また、ブラウザーの進むボタンと戻るボタンを押すことで発生する同じ問題も解消されます。

3. セッションに特別なフラグを保存します。フォーム ページが要求されると、特殊な文字列が生成され、セッションに保存され、フォームの隠しフィールドに配置されます。フォーム データを受け入れて処理するときに、識別文字列が存在するかどうかを確認し、すぐにセッションから削除してから、データを通常どおり処理します。

フォーム送信に有効なフラグ文字列がないことが判明した場合、フォームは送信されており、送信は無視されることを意味します。

これにより、Web アプリケーションにさらに高度なレベルの XSRF 保護が提供されます。

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

以上が4つの方法の紹介です。より良い解決策があればぜひ教えてください。この記事は今後も更新されていきます。

<<:  IE6、IE7、IE8 で CSS3 の丸い角と影のスタイルをサポートする

>>:  親要素に対する CSS 子要素の固定配置ソリューションの詳細な説明

推薦する

JSのアンカーリンクをクリックするとスムーズにスクロールし、自由にトップ位置に調整できます。

アンカーリンクをクリックするとスムーズにスクロールし、自由にトップ位置に調整できます。 1. アンカ...

Linux でタイムアウト付きの接続関数を試す

前回の記事では、Windows でタイムアウトを試してみました。この記事では、Linux で試してみ...

Nginx http を https にアップグレードする手順を完了する

httpとhttpsの違いは一部のウェブサイトでは、http を開くと、安全ではないというメッセージ...

js の getBoundingClientRect() メソッドの詳細な説明

1. getBoundingClientRect() 分析getBoundingClientRect...

jsはショッピングウェブサイトの商品の拡大鏡効果を実現します

この記事では、ショッピングサイトの商品の拡大鏡効果を実現するためのjsの具体的なコードを紹介します。...

フォームアクションとonSubmitの例

まず、action はフォームの属性です。HTML5 では必須の属性値として定義されています。onS...

WeChatミニプログラム公式顔認証の詳しい説明

ミニプログラムはユーザーの個人情報を収集してアップロードしましたが、拒否されました。こんにちは、ミニ...

vue-cropper コンポーネントは画像の切り取りとアップロードを実現します

この記事では、画像の切り取りとアップロードを実装するためのvue-cropperコンポーネントの具体...

MySQL ストアド プロシージャのエラー処理例の詳細な説明

この記事では、例を使用して MySQL ストアド プロシージャのエラー処理について説明します。ご参考...

Mysql Workbench クエリ mysql データベース メソッド

Mysql Workbench はオープンソースのデータベース クライアントです。このオープンソース...

MySQLグループリンクの使用に関する詳細な説明

MYSQL におけるグループ化とリンクは、データベースの操作やデータのやり取りで最もよく使用される ...

Apache ポートに基づいて仮想ホストを作成する例

apache: ポートに基づいて仮想ホストを作成する仮想ホスト(a、b、c)の作成を例に挙げます1)...

ウェブフォーム送信方法の詳細な概要

まず、フォームを送信するいくつかの方法を見てみましょう。 1. <!--一般的な送信ボタン--...

Linux で FTP イメージ サーバーをインストールして展開する方法

Linux で FTP サーバーを設定するためのチュートリアルを参照してください https://w...