随机会话无效

jco*_*lin 6 java session tomcat session-timeout java-ee

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

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

bee*_*tra 4

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

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

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