2009-04-20 18 views
5

私はTomcatでJ2EE Webアプリケーションを実行していますが、最近はアプリケーションにメトリックを追加する作業が行われています。私はSessionListenerを使用して、セッションが破棄されたことを検出してから、メトリックをデータベースにアップロードしています。私のセッションのタイムアウトはweb.xmlに30分に設定されています。私はプログラム的にセッションを無効にしていません。多くの場合、テストのためにログインする1〜5分の間にログインすると、3つまたは4つのメトリックがデータベースにアップロードされ、すべてセッションIDが異なります。ランダムセッションの無効化

web.xmlとsession.invalidate()のほかに、Tomcatのセッションが破棄される原因は何ですか?例外? Tomcatはランダムにセッションを無効にしますか?

+0

永続セッションを使用していますか? – trunkc

+0

私は永続セッションを使用していません。 – jconlin

+0

ログにはセッションが1つしか作成されていません。セッションの作成が3つまたは4つであることに言及しています。セッションが破棄されたとき、または作成されたときにもメトリックを保持しますか? –

答えて

4

おそらくあなたのウェブブラウザが、あなたのアプリケーションが予期していたであろうウェブアプリケーションへのリクエストでセッションクッキーを送信しないことにしました。 私は、これがApacheの書き換えルールで起こっているのを見ました。セッションクッキーパス外のURLがWebアプリケーションにリダイレクトされました。そこfolowingのようなものは、(詳細は間違っている可能性があります)起こっ:

  • 私のWebアプリケーションは、このようにセッションクッキーは、このパス/アプリ/
  • ページにバインドされた/アプリ/
  • に位置していましたwebアプリケーションの/アプリ/はcreateImageに(パスが一致しませんでした)
  • サーバが(内部的に)要求をリダイレクトこのイメージのためにそのリクエストにセッションCookieが送信されなかった
  • ブラウザを/img/magic.jpegと呼ぶ?魔法
  • ウェブアプリケーションがセッションCookieを受信しなかったため、新しいセッションが作成されました。

新しいセッションの初期URLを記録すると、問題が発生するかどうかを確認する必要があります。

0

これはおそらくサーバーで起こっていることではありませんが、サーバーでシステム時刻が前に設定されていると、セッションが30分の「経過時間」よりも早く期限切れになる可能性があります。少なくとも5.5のTomcatはセッションを満了させるために "clock time"を使用していたので、システムクロックを変更するとセッションの有効期間に影響します。