4

在我的应用程序中,我有一个退出按钮,单击该按钮后,当前用户的会话将被以下代码无效。

FacesContext.getCurrentInstance().getExternalContext().invalidateSession();

我将用户重定向到不同的页面。

但是现在我想如果用户单击后退按钮,我会将他带到应用程序的起始页面,而不是他访问的最后一页。我有一个应用程序阶段侦听器,它将与页面缓存相关的标头设置为“无”,现在我只想检测到该用户会话是否已失效。但我猜每当用户单击后退按钮时,它都会为用户创建一个新会话。有什么办法可以预防吗?

4

1 回答 1

12

如何在 JSF 2 中检测会话已失效?

检查用户是否请求了无效会话 ID 。

HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();

if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid()) {
    // Session has been invalidated during the previous request.
}

它正在为用户创建一个新会话。有什么办法可以预防吗?

只是不要让您的应用程序代码创建会话。当您的应用程序需要在会话中存储某些内容时,将隐式创建会话,例如视图或会话范围的 bean,或 a 的视图状态<h:form>等。


我有一个应用程序阶段侦听器,它将与页面缓存相关的标头设置为“无”

servlet 过滤器是一个更好的地方。另请参阅避免 JSF Web 应用程序上的后退按钮

于 2012-06-26T12:02:45.437 回答