0

Web アプリケーションを作成し、tomcat7 にデプロイしました。このアプリは次のように機能します。ユーザーが適切な認証を介してログインすると、ユーザーが回答を選択してテストを送信するテスト ページ (html) が表示されます。サブミット後、別のサーブレットが呼び出され、スコアがユーザーに表示されます。

ここでの問題は、ユーザーが戻って (ブラウザの [戻る] ボタンを使用して) スコアを取得した後、テストを再度送信すると、スコアが変更されていることです。これを防ぐにはどうすればよいですか?

4

1 に答える 1

1

通常のトリック (一部のフレームワークが提供します) は、フォームが生成されるときにトークンを生成し、それをユーザーのセッションとフォームの非表示フィールドに格納することです。フォームが送信されると、受け取ったトークンとセッション内のトークンを比較します。一致する場合は、セッションからトークンを削除し、フォームの送信に進みます。

ユーザーが戻ってフォームを再送信すると、セッションにはトークンがなくなり、フォームの送信を処理する代わりにエラー メッセージが表示されます。

もう 1 つの方法は、送信がべき等になるようにフォーム処理をコーディングすることです。たとえば、盲目的にスコアを上げる代わりに、質問がユーザーによって既に回答されているかどうかを確認し、2 番目の回答を無視することができます。

于 2012-05-05T19:17:25.717 に答える