2011-06-23 10 views
6

私はHttpSessionListenerの実装を持っています。ここでは、アプリケーションの 'ロックされた'リソースはsessionDestroyedメソッドで解放されています。HttpSessionListener - セッションタイムアウトでsessionDestroyedメソッドが呼び出されますか?

「ロック」情報はデータベースに保持されており、ほとんどの場合、ロックの解放は正常に機能しています。しかし、セッションがアクティブでなくてもリソースがロックされている場合があります。

sessionDestroyedが呼び出されていない可能性があるのですか?セッションがタイムアウトしたとしたら、sessionDestroyedメソッドが呼び出されますか?

ユーザがログアウトせずにブラウザタブを閉じて(セッションが破棄され)、リスナーが呼び出されるとしますか?

ありがとうございます!

答えて

2

サーブレットエンジンはセッションタイムアウトを処理します。 セッションがもはや有効でなくなり、sessionDestroyedを呼び出すときは、それ自身で決定します。 (これは、ユーザーがブラウザを閉じた後にしばらく時間がかかることがあります)。

他のいくつかのポイント:

ログ

はおそらく、あなたはのsessionCreatedとのsessionDestroyedメソッドにいくつかのログを追加することができます。各sessionCreatedのためにあなたはsessionDestroyedを持つべきです。

の取り扱い

Excepionおそらくものがロックされたままという事実が破棄されていないセッションが原因ではありませんが、おそらくあなたのsessionDestroyedロジックのエラーに。十分な例外処理/ログ記録がありますか?あなたは長い間あなたのロックされたリソースをチェックするのに十分な

タイミング

を待っていましたか? (すべてのクライアントを終了し、アプリケーション/サーバーで設定されたセッションタイムアウト値を考慮に入れてください)。前述のように、サーバーはブラウザーを閉じるユーザーを検出できませんが、httpセッションのリストを維持し、タイムアウト後にサーバーを破棄します。

+0

ありがとうddewaele!例外処理がトリックでした。私はデータベースの例外を捕まえていませんでした。例外が処理されるとアプリをテストし、結果を確認します。 – Ajay

1

したがって、sessionDestroyedが呼び出されない可能性があるかどうか疑問に思っていますか?セッションがタイムアウトした場合 - sessionDestroyedメソッドが呼び出されますか?

はい。セッションがタイムアウトするか、プログラムによって(HttpSession.invalidate()を介して)期限切れになると、セッションは破棄されます。

ユーザーがログアウトせずに(ブラウザセッションを破棄して)リスナーを呼び出すとしますか?

いいえ、セッションはまだ有効なためです。前記ユーザーがウェブサイトを再び開くと、彼/彼女のセッションは有効である。HttpSessionjavadocから

通知は完全な結合方法の後に送信されます。セッションが無効または期限切れになった場合、セッションが無効化または期限切れになった後に通知が送信されます。

関連する問題