0

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

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

我们使用会话 bean 进行身份验证,它实现了HttpSessionBindingListener.

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

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

<session-timeout>

适当设置为 30 分钟。

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

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

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

我的会话怎么会随机为空?

我们尝试了建议的标志 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 是突然被调用的。

雄猫 6.0.26

JSF 2.1.10

干杯

4

1 回答 1

1

毕竟是令人尴尬的过滤器之一。我想这就是当每个人都假设其他人都检查过某些东西时可能发生的事情

于 2012-12-19T14:37:23.083 回答