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

use*_*373 4 session jsf jsf-2

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

FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
Run Code Online (Sandbox Code Playgroud)

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

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

Bal*_*usC 11

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

检查用户是否已经请求会话ID是无效的.

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

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

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

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


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

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