2012-01-24 10 views
1

私はサーブレット・アプリケーションをサイドoc4jにデプロイしました。OC4JのsetMaxInactiveIntervalが正確ではありません

私が使用して1分後にユーザーセッションを無効にしようとしています:

session.setMaxInactiveInterval(1 * 60); 

をしかし、何が起こるかというとそれは1分以上かかります(1分半に達する場合があります)セッションが破棄されます前に、ということです。

これは実装上の問題ですか、それとも何ですか?

答えて

1

ちょうど1分後にサーバーに実際にHTTPリクエストを送信する代わりに、HttpSessionListener#sessionDestoryed()が呼び出されるまで待って破壊をチェックしているようです。

セッション破棄は、バックグラウンドジョブによって管理されるほとんどのサーバー上で間隔を置いて実行されます。間隔は、サーバーの作成/バージョン、構成、場合によっては負荷に応じて1分以上です。このジョブは、期限切れであるかどうかに関係なく、開いているすべてのセッションをチェックし、それに応じて期限切れのセッションをスイープします。したがって、セッション破棄がであることは当てはまりません。クライアントが要求を送信していない限り、セッションが期限切れになったのと同じ秒でが呼び出されます。このバックグラウンドジョブは1秒ごとに実行されません。CPUが多すぎます。

しかし、セッションがサーバのメモリにまだ残っているが有効期限が切れている間に、サーバがセッションIDを持つ要求を取得すると、すぐにセッションの破棄が呼び出されます。

だから、それを受け入れるか、テスト方法を変更する必要があります。

関連する問題