Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测JSF2中已失效的会话?_Jsf_Session_Jsf 2 - Fatal编程技术网

如何检测JSF2中已失效的会话?

如何检测JSF2中已失效的会话?,jsf,session,jsf-2,Jsf,Session,Jsf 2,在我的应用程序中,我有一个退出按钮,单击该按钮,当前用户的会话将因以下代码段而无效 FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 我将用户重定向到另一个页面 但现在我想,如果用户点击后退按钮,我将带他进入应用程序的起始页,而不是他访问的最后一页。 我有一个应用程序阶段监听器,它将页面缓存相关的头设置为“无”,现在我只想检测该用户会话是否已失效。 但我猜,每当用户单击后退按钮时,它都会为用户

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

FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
我将用户重定向到另一个页面

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

如何检测JSF2中已失效的会话

检查用户是否具有该功能


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

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


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


servlet过滤器是更好的选择。另请参见

非常感谢,但只有一个问题:为什么在设置响应标题时,您更喜欢过滤器而不是阶段侦听器?因为这样更容易。作业根本不需要JSF上下文。另外,链接答案中的示例考虑了JSF资源,您确实不想为它们禁用缓存。
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();

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