問題タブ [double-submit-prevention]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ステートレスWebアプリケーションでの二重送信を防ぐための手法はありますか?
既存のJavaWebアプリケーション(実際にはstruts)に二重送信防止を実装したいと思います。アーキテクチャに関しては、2〜N個の可能なアプリケーションサーバー(tomcat)と1台の単一データベースサーバー(mysql)について話します。個々のサーバーはお互いを認識しておらず、メッセージを交換することはできません。アプリケーションサーバーの前には、スティッキーセッションを実行する機能を持つ単一のロードバランサーがあります。
つまり、基本的にはクライアント側とサーバー側の2種類の二重提出防止があります。可能であれば、サーバー側に移動したいと思います。ブラウザでCookieやJavaScriptを無効にすると、すべてのクライアント側の手法が失敗するように見えるからです。
これにより、データベースロックを介してミューテックスのような同期を行うというアイデアが残ります。ユーザーが入力したデータのチェックサムを計算し、それを専用のデータベーステーブルに保持することは可能かもしれないと思います。提出するたびに、アプリケーションは、指定された提出が重複していることを示す等しいチェックサムの存在をチェックする必要があります。もちろん、このテーブルのチェックサムは定期的にクリアする必要があります。問題は、データベースに重複するチェックサムがすでに存在するかどうかをチェックし、存在しない場合はチェックサムを挿入するプロセス全体が非常に重要なセクションであるということです。したがって、チェックサムテーブルは事前にロックし、セクションの後で再度ロックを解除する必要があります。
テーブルロックについて考えると、デッドロックとボトルネックのアラームベルが鳴り始めます。だから私の質問は:ステートレスなWebアプリケーションでの二重提出を防ぐための賢明な方法はありますか?
ストラットは、Cookieが無効になっていると無残に失敗するため、ここでは適用できないことに注意してくださいTokenInterceptor
(これは、セッションCookieなしでは存在しないHTTPセッションに依存しています)。
jquery - jQuery Enterキーがすでに無効になっているときに、Enterキーが押された後、Enterキーを無効にする
ajax送信を実行できるように、Enterキーを無効にしましたが、サーバーからの応答が返される前にユーザーがEnterキーを2回押した場合に、フォームが2回送信されないようにします。
ここでは、Enterキーを無効にして、次のような関数を割り当てていますsubmitForm()
。
他の場所でもう一度試しましbind()
たが、何もしませんでした。いろいろな場所で試してみpreventDefault()
ましたが、間違った場所に置いているか、間違っていると思います。これを機能させることができないようです。
私はこれを見つけました:それのために関数が実行された後にEnter / Returnキーを無効にする方法は?、しかし、投稿者の例では、スクリプトがボックスに何かがあるかどうかを確認するため、私の質問には答えませんが、送信したかどうかを確認したいと思います。どうすればいいのかわかりません。私が本当にやりたいのは、ajax呼び出しでサーバーから返事が来るまでEnterキーを無効にすることです。次にsubmitForm()を示します。
この送信機能をできるだけ高速にする必要があるため、サーバー側で何もする必要はありません(これはペースの速いデータ入力フォームになります)。
javascript - ページのリロード後に二重送信
次のシナリオがあります。
最初のWebページには、サーバーに送信するフォームがあります。サーバーは2ページ目で応答します。2番目のページには、フォームの読み込み時にjavascriptを使用して送信されている非表示のフォームがあり、ユーザーを外部サイトにリダイレクトします。
私の質問は次のとおりです。ユーザーが最初のページでフォーム送信を2回(最初のページの1ページビュー内で)実行して2番目のフォームを二重送信することは可能ですか?
質問は、これが実際にどのように機能するかに関するものです。別のシナリオは必要ありません。
ruby-on-rails - rails:ajaxは複数のフォームの送信を回避します
送信ボタンがあり、AJAXリクエストが終了するまで1回だけ押される/送信する必要があります。noScriptの場合、Javascriptソリューションは安全ではありません。Railsでそれを行う適切な方法はありますか?
vb.net - 送信時の Post-Redirect-Get (PRG) 概要ページ
そこで、フォームの二重送信の問題に対処する方法として、PRG と呼ばれるこのメソッドを調べました。ただし、ユーザーに表示される概要ページ/成功メッセージの降下実装をまだ見つけていません。私が考えることができる唯一の方法は、セッション変数を保存することですが、複数の更新で保持したくありません。メッセージ/概要を一度表示すれば完了です。さらに、ユーザーが以前に送信されたページに戻れないことが理想的です。
これが私のPRGコードです:
問題は、このメッセージを送信の結果として直接リダイレクトに表示する方法です。または、更新に関係なく、最も簡単で最も意味のあるメッセージを表示するだけです。ありがとう ;)
python - WTFormsは、更新時にPOST送信を二重に防止します。flask-wtf
私は WTForms と Flask を Flask-WTF 拡張で使用しています
私のフォームは次のようになります。
Jinja2 テンプレート:
レンダリングされたフォーム:
フォームの「アクション」を変更してリダイレクトを行わずに、ブラウザーの更新ボタンのクリックでフォームの二重送信を防ぐことは可能ですか?
forms - GWTでサーバー側の二重送信防止を実装するには?
多くのフォームを使用して GWT アプリケーションを構築しています。ディスパッチ モジュールで gwt-platform を使用しています。
私の考えている次のステップは、サーバー側での二重送信を防ぐことです。問題は、それを正確に行う方法がわからないことです...
私は次のようなことを考えました:
- アプリケーションがロードされると、サーバーは生成されたトークンをクライアントに提供します
- サーバーは HTTPSession 内にトークンを保存します
- クライアントがフォームを送信すると、(1.) からのトークンがフォームとともに送信されます。
- サーバーは、送信されたトークン == HTTPSession 内のトークンであるかどうかを確認します
- クライアントへの応答で、新しいトークンを送信します
トークンを HTTPSession 内に保存しても安全ですか? または、サーバー上で SESSION_ID から生成されたトークンにマップする HashMap を作成する必要がありますか?
それとも、GWT や gwt-platform などで既に実装されているのでしょうか?
ありがとう
jsf - JSFでダブルクリック防止を行う方法
大量のデータに対して実行され、完了するまでに時間がかかる検索ページがいくつかあります。ユーザーが検索ボタンをクリックしたときに、検索結果を 2 回送信できないようにしたいと考えています。
JSFで「ダブルクリック」の検出/防止を行うためのベストプラクティスはありますか?
PrimeFaces コンポーネントは、検索ボタンがクリックされてから検索が完了するまでの期間、UI を無効にするため、私たちが望むことを実行できるように見えますが、使用できるより一般的な戦略はありますか (おそらくそうではないもの) PrimeFaces に依存している)? 理想的には、検索が完了するまで、ボタンのクリックを無効にするか無視します。必ずしも UI 全体を無効にする必要はありません (blockUI でできるように)。
forms - IE のみでフォームが 2 回送信される
私は、stripes:submit ボタンを使用して ActionBean メソッドを呼び出し、stripes:submit ボタンの OnClick() JavaScript 関数を使用してログインフォームを送信する jsp ログインフォームページを持っています。このシナリオでは、IE8 ブラウザーは要求を 2 回送信します。FF や Chrome などの他のブラウザでは問題なく動作します。これを防ぐ方法はありますか。
よろしくお願いいたします。
よろしく、
NM