【问题标题】:Tomcat / Java EE: Sessions cease unexpectedlyTomcat / Java EE:会话意外停止
【发布时间】:2012-10-18 21:07:16
【问题描述】:

我们遇到了突然注销的问题。它带有一个版本切换,以前的应用程序运行 JSF 1.2,而这个运行 JSF 2.1。由于这是一次重大的重构,因此无法跟踪任何特定的代码更改。但是已经对代码进行了重大更新(尽管主要是视图而不是 bean)。

如果我们使会话无效,我们可以控制每个地方,它们被记录并且不是原因。

我们使用 session-bean 进行身份验证,它实现了HttpSessionBindingListener。

我们记录 valueUnbound 并且可以判断注销是由于会话生命周期结束引起的。我们正在努力寻找原因。

Tomcat 6.0.26 已被分析,一切正常。这也发生在负载较小的小客户身上。

<session-timeout>

适当地设置为 30 分钟。

    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>

不确定这有什么影响,但他们都使用客户端。

我们尝试绕过负载平衡,但问题仍然存在。

How could randomly my session is null?

我们尝试了建议的标志 emptySessionPath 但没有帮助。

此外,我们不确定如何按照建议继续记录请求标头。

在我们的应用程序中,出于调试原因,我尝试终止会话cookie:

HttpServletResponse response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
Map<String, Object> cookies = getFacesContext().getExternalContext().getRequestCookieMap();
Cookie cookie = (Cookie) cookies.get("JSESSIONID");
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);

似乎它没有被破坏或重新创建。我也试过在登录的时候删除浏览器中的cookie,还是没问题。

希望了解一些关于如何进一步调试的具体提示?基本上现在我们只知道 valueUnbound 是突然被调用的。

Tomcat 6.0.26

JSF 2.1.10

干杯

【问题讨论】:

  • 会话超时是否存在某种模式?它们是在一段时间后发生还是随机发生?此外,所有 客户或仅部分客户会发生这种情况吗?因为对于没有启用 cookie 并且您没有进行任何 URL 重写的客户端,会话处理将失败。您是否还使用 tomcat 将会话持久化到持久存储?检查 tomcat 日志中的持久性失败异常
  • 完全随机。有时在 3 小时后,有时在 3 次点击后。许多不同的用户,甚至不同的操作系统和浏览器。 URL 重写 - 无。 Tomcat 日志已经过非常仔细的研究,我什至认为我们不会持续存在。
  • 这只是一个实验。您能否实现 JSF PhaseListener 和 HttpSessionListener 并在两者中收集足够的环境统计信息,目标是您可以查明 Web 应用程序请求处理生命周期与会话创建和销毁之间的某种模式。

标签: session tomcat jsf-2 tomcat6


【解决方案1】:

毕竟是过滤器之一。我想当每个人都假设其他人都检查了某些东西时会发生这种情况

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2016-06-08
    • 2015-05-11
    • 2019-11-13
    相关资源
    最近更新 更多