1

フォームが送信された後、ユーザーが [戻る] ボタンをクリックしたときに、データが再送信されないようにするにはどうすればよいですか? 私が読んだことの多くは、これに対する解決策は PRG 'パターン' を実装することであることを示しています。

例として使用したいこの Web ページPRG パターンを見つけました。

このコードを実行すると、[戻る] ボタンをクリックしてから [送信] ボタンをもう一度クリックすると、リダイレクトされますが、フォームにデータを再送信させることができます。したがって、これがフォームデータの再送信を防ぐ方法がわかりません。

では、このページを例として使用すると、この動作を防ぐためにコードをどのように変更できますか?

4

1 に答える 1

1

PRG は、リロード再送信イベントを防ぐために使用されます。いつでもブラウザーからページに戻って、これを使用してフォームを送信できます。

これを防ぐには、フォームのレンダリング中にトークンを発行し、送信中にサーバーに送信して、それが正しいトークンであるかどうかを確認し (セッションのどこかに置くことによって)、リクエストを処理します。

更新:フォームを提供するときに、セッションでいくつかのトークンを設定します

request.getSession().setAttribute("formToken", someCode);

フォームの送信時に、トークンをサーバーにポストし、それをセッションからのものと照合します。両方の一致がリクエストを許可する場合、一致しない場合は、リクエストがすでに実行されているか、誰かがフォーム投稿をシミュレートしようとしています送信されたデータにフォーム トークンがない場合、

そのため、すでに一度送信した場合、ブラウザ ボタンを使用して戻って再送信すると、コードが一致せず、再送信が妨げられます。

並列リクエストケースを処理するためにトークンチェックを同期させます

于 2012-11-30T22:33:07.330 に答える