6

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

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

4

2 に答える 2

4

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

  • 私の Web アプリケーションは /app/ にありました
  • したがって、セッション Cookie はこのパス /app/ にバインドされました。
  • /img/magic.jpeg を参照する Web アプリケーション内のページ
  • ブラウザは、この画像のリクエストでセッション Cookie を送信しませんでした (パスが一致しませんでした)
  • サーバーはリクエストを (内部的に) /app/createImage?magic にリダイレクトしました
  • Web アプリケーションはセッション Cookie を受信しなかったため、新しいセッションを作成しました

新しいセッションの初期 URL をログに記録すると、これが問題の原因かどうかを確認できるはずです。

于 2009-04-20T21:50:51.487 に答える
0

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

于 2009-04-20T21:05:06.400 に答える