随机会话无效

时间:2009-04-20 20:57:37

标签: java session tomcat java-ee session-timeout

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

除了web.xml和session.invalidate()之外,还有什么可以导致Tomcat中的会话被销毁?例外? Tomcat会不会随意使会话无效?

2 个答案:

答案 0 :(得分:4)

您的webbrowser可能已经决定不会将请求发送到Web应用程序,而您的应用程序可能会在该应用程序中发送。 我已经看到这种情况发生在apache重写规则中;会话cookie路径之外的URL被重定向到Web应用程序。有类似于下面发生的事情(细节可能是错误的):

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

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

答案 1 :(得分:0)

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