我想弄清楚如何在 Glassfish 3.1 中的 JSF 登录表单上防止会话固定。使用Servlets很容易做到,所以我尝试对 JSF 做同样的事情(基于这个问题:Retrieving session ID value from a JSF request):
FacesContext fCtx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
session.invalidate();
fCtx.getExternalContext().getSession(true);
它似乎有效,但是当我单击浏览器的后退按钮并重新输入登录详细信息时,我得到:
javax.faces.application.ViewExpiredException: viewId:/index.xhtml - 无法恢复视图 /index.xhtml。
它只有在“刷新”并重新发送后才能再次工作。
这可能是什么原因?