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

时间:2012-06-26 11:56:14

标签: jsf session jsf-2

在我的应用程序中,我有一个退出按钮,点击其中当前用户的会话被以下代码段无效...

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

我将用户重定向到另一个页面。

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

1 个答案:

答案 0 :(得分:11)

  

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

检查用户是否requested a session ID is not valid

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

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

  

它正在为用户创建一个新会话。有什么方法可以阻止它吗?

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


  

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

servlet过滤器是一个更好的地方。另请参阅Avoid back button on JSF web application