6

我正在 Tomcat 中运行 J2EE Web 应用程序,最近我的任务是向应用程序添加指标。我正在使用 SessionListener 来检测会话何时被破坏,然后将指标上传到数据库。我的会话超时在我的 web.xml 中设置为 30 分钟,并且我不会在任何地方以编程方式使会话无效。通常在我登录测试的 1 5-10 分钟期间,我会看到上传到数据库的 3 或 4 组指标,它们都具有不同的会话 ID。

除了 web.xml 和 session.invalidate(),还有什么会导致 Tomcat 中的会话被破坏?例外?Tomcat 会随机使会话无效吗?

4

2 回答 2

4

可能您的网络浏览器已决定不将会话 cookie 发送到您的应用程序所期望的网络应用程序的请求中。我已经看到这种情况发生在 apache 重写规则中;session-cookie 路径之外的 URL 被重定向到 Web 应用程序。发生了类似以下的事情(细节可能有误):

  • 我的网络应用程序位于 /app/
  • 因此会话 cookie 被绑定到这个路径 /app/
  • web应用程序中的一个页面引用/img/magic.jpeg
  • 浏览器未在其对该图像的请求中发送会话 cookie(路径不匹配)
  • 服务器将请求(内部)重定向到 /app/createImage?magic
  • Web 应用程序没有收到会话 cookie,因此它创建了一个新会话

如果您记录新会话的初始 URL,您应该能够查看这是否会导致您的问题。

于 2009-04-20T21:50:51.487 回答
0

这可能不是您的服务器上发生的情况,但如果在服务器上设置了系统时间,这可能会导致会话过期的速度快于 30 分钟的“经过时间”。Tomcat - 至少从 5.5 开始 - 使用“时钟时间”来过期会话,因此更改系统时钟将影响会话生命周期。

于 2009-04-20T21:05:06.400 回答