この質問に記載されているのと同様の問題が発生しています - https://stackoverflow.com/questions/1495390/how-do-i-invalidate-a-session-in-jsf。私がセッションを持ってsession.invalidate()はJSFセッションスコープの値を実際にはクリアしません
は#
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());
それはほとんど正常に動作などのアクションログアウトを持ってLoginBeanを、スコープ。
出力#
{[email protected],... }
invalidating session
{}
sessionMapは空で、何もセッションスコープの豆が存在しないことを意味します。しかし、ログアウトアクションの後、別の同じページにリダイレクトされます。ログインは同じページのレイヤーです。フラグメントjspsにはまだ古いデータが表示されていることがわかります。
facade.removeCookieでJSESSIONIDを削除していません。これは、ユーザーに関連する他のいくつかのクッキーを削除します。
ご協力いただければ幸いです。
ありがとうございました。
ありがとう、それはトリックでした。また、ナビゲートの代わりにec.redirectを行う必要がありました。そして、私のヌルチェックポイントのおかげで、私は時々これらのことを見落としてしまいます。 – bahetivijay