3

線形のJavaEEWebアプリケーションがあり、ユーザーは多くのページに線形にデータを入力する必要があります。アプリにタイムアウトを設定しました。(タイムアウトの直前にjavascriptアラートがあり、ユーザーに警告し、続行したくない場合はリダイレクトします)。

これは良いことですが、私の問題は、セッションの期限が切れた後にユーザーが戻るボタンをクリックすると、データが表示されることです。私はこのSOの答えを使用してこれをある程度解決しました:

ログアウト後に以前にアクセスしたセキュリティで保護されたページがユーザーに表示されないようにする

ただし、これはカスタムページではなく、セッションの有効期限が切れていない場合にも発生します。

セッションが期限切れになった場合(できればJSなし)に、ユーザーがクリックバックした後にカスタムページを表示するにはどうすればよいですか?

4

1 に答える 1

3

これは、Spring Web Flow のような多くの Web フレームワークに実装されているPOST-REDIRECT-GET パターンを使用する Web アプリケーションを必要とするオプションです。

このようなコンテキストでは、セッションの有効期限が切れた後の戻るクリックGETは、ブラウザーが新しい要求を送信し、サーバー コードがそれを新しい新しい で受信することを意味しますHttpSessionウィザードが最初のページで開始するセッション属性のおかげで、その状況を検出できます。GET要求が最初のページに対するものではなく、セッションにその属性が含まれていない場合は、ログアウトまたは有効期限のタイムアウトによってセッションが失われたことを意味します。そのため、カスタム ページを表示して、失業したことをユーザーに警告し、ウィザードの最初のページに誘導することができます。

POST-REDIRECT-GET パターンを使用すると、ブラウザーの戻るボタンが、前述の新しい GET 要求を送信せずに、最新の入力を含む前のフォームを表示する可能性はありません。

ちなみに、このようなウィザードをたくさん設計する場合は、コントローラ サーブレットのみで構成されるSpring Web Flowを使用して、任意のビュー テクノロジを使用できるようにすることをお勧めします。

別の方法:サーバーに送信するたびに、ウィザード中にユーザーが提供したすべての情報を (クリアまたはエンコードされた状態で) 保存するカスタム永続 Cookie のおかげで、データ損失を回避することができます。その場合、セッション属性も役に立ちません。ただし、すべての Cookie が 1 行で送信されるため、Cookie の最大長、Cookie の数、または HTTP ヘッダー行の最大数などの多くの制約があるため、達成が複雑になる場合があります...

于 2012-07-29T13:17:12.180 に答える