Sitzung.invalidate() nicht wirklich löscht JSF session-scoped Werte

Sehe ich ein ähnliches Problem wie bereits in diesem Frage - https://stackoverflow.com/questions/1495390/how-do-i-invalidate-a-session-in-jsf.

Habe ich eine session-scoped LoginBean, die haben eine Aktion logout als #

    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());

Es fast funktionieren.

Ausgabe #

{xyzBean=com.xyz.bean.XYZBean@46f046f0,... }

invalidating session

{}

Der sessionMap leer, d.h. es sind keine session-scope Bohnen. Aber nach logout action es leitet zu einer anderen Seite. Anmeldung eine Ebene auf der gleichen Seite. Ich sehe, dass fragment jsps noch zeigt die alten Daten.

Bin ich nicht entfernen JSESSIONID in der Fassade.removeCookie. Es entfernt einige andere cookies im Zusammenhang mit Benutzer.

Jede Hilfe würde geschätzt werden.

Dank.

InformationsquelleAutor bahetivijay | 2011-02-03
Schreibe einen Kommentar