Tomcat / Java EE:会话意外停止

时间:2012-10-29 14:25:45

标签: session tomcat jsf-2 tomcat6

我们遇到突然注销的问题。它带有一个版本开关,之前的应用程序运行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

干杯

1 个答案:

答案 0 :(得分:1)

毕竟,其中一个过滤器令人尴尬。我想当每个人都假设其他人都检查过某些事情时会发生什么