在我的应用程序中,我有一个退出按钮,点击其中当前用户的会话由以下代码段无效.
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
Run Code Online (Sandbox Code Playgroud)
我将用户重定向到另一个页面.
但是现在我想如果用户点击后退按钮,我将把他带到应用程序的起始页面,而不是他访问的最后一页.我有一个应用程序阶段侦听器,它将页面缓存相关的标头设置为"无",现在我想要的是检测该用户会话是否已失效.但我猜每当用户点击后退按钮时,它就会为用户创建一个新会话.有什么方法可以预防吗?
Bal*_*usC 11
如何检测会话已在JSF 2中失效?
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应用程序上的避免后退按钮