2009-04-20 80 views
5

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

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

+0

你使用永久会话吗? – trunkc 2009-04-20 21:05:20

回答

4

可能您的浏览器已决定不会将请求中的会话cookie发送到Web应用程序,在那里您的应用程序会预期发送一个。 我已经看到这发生在一个Apache重写规则; session-cookie路径之外的URL被重定向到web应用程序。有什么样的如下因素发生(细节可能是错误的):

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

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

0

这可能不是您的服务器上正在发生的事情,但是如果系统时间在服务器上设置为前向,则会导致会话过期时间超过30分钟的“已用时间”。 Tomcat - 至少5.5版本 - 使用“时钟时间”使会话过期,因此更改系统时钟将影响会话生存期。