我看到與此問題中提到的類似問題 - https://stackoverflow.com/questions/1495390/how-do-i-invalidate-a-session-in-jsf。session.invalidate()實際上並未清除JSF會話作用域值
我有一個會話範圍LoginBean,其中有一個動作註銷爲#
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
HttpSession session = (HttpSession) ec.getSession(false);
HttpServletResponse response = (HttpServletResponse) ec.getResponse();
// remove cookies
response.addCookie(facade.removeCookie(((HttpServletRequest)ec.getRequest()).getCookies()));
// check what we have in sessionMap
System.out.println(ec.getSessionMap());
// remove attribute
session.removeAttribute("XYZ");
// invalidate session
if (session != null) {
System.out.println("invalidating session");
session.invalidate();
}
// see what is there in session map
System.out.println(ec.getSessionMap());
它幾乎正常工作。
輸出#
{[email protected],... }
invalidating session
{}
的sessionMap是空的,意味着沒有會話範圍豆。但是,註銷操作後,它會重定向到另一個相同的頁面。登錄是同一頁面上的一個圖層。我看到片段jsps仍然顯示舊數據。
我沒有刪除facade.removeCookie中的JSESSIONID。它刪除了一些與用戶有關的其他cookie。
任何幫助,將不勝感激。
謝謝。
謝謝,這個伎倆。另外,我不得不在ec.redirect上進行導航。並感謝我的無效檢查點 - 如果我卡住了,我有時會忽略這些東西..:P – bahetivijay 2011-02-03 19:38:16