2011-02-03 13 views
2

この質問に記載されているのと同様の問題が発生しています - 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を削除していません。これは、ユーザーに関連する他のいくつかのクッキーを削除します。

ご協力いただければ幸いです。

ありがとうございました。

答えて

2

ブラウザキャッシュから提供されているページを表示している可能性があります。動的ページをキャッシュしないようにWebブラウザに指示するHTTP応答ヘッダーを追加する必要があります。たとえば<url-pattern>にマップされているjavax.servlet.Filterでこれを行うことができます。 *.jsfか何かとdoFilter()方法で、次の仕事ん:

HttpServletResponse httpResponse = (HttpServletResponse) response; 
httpResponse.setHeader("Cache-Control", "no-cache,no-store,must-revalidate"); // HTTP 1.1 
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0 
httpResponse.setDateHeader("Expires", 0); // Proxies. 
chain.doFilter(request, response); 

は、試験前にブラウザのキャッシュをクリアすることを忘れないでください。問題に関係のない)


、あなたのコードでif (session != null) nullcheckそのnullcheckに達するとセッションが決してnullにならないので余分です。 nullだった場合、removeAttribute()呼び出しでNullPointerExceptionがスローされ、nullcheckには到達しません。

+0

ありがとう、それはトリックでした。また、ナビゲートの代わりにec.redirectを行う必要がありました。そして、私のヌルチェックポイントのおかげで、私は時々これらのことを見落としてしまいます。 – bahetivijay

関連する問題