# Session.invalide() funktioniert nicht richtig



## Guest (10. Mrz 2008)

Hallo,

ich habe eine simple Login-Logik in JSF programmiert. Soweit, sogut. Der Login klappt, und ich speichere eine Referenz meiner User-Klasse in der Session.

Beim Knopf auf Logout will ich sichergehen, dass meine Session gelöscht wird, doch hier steht nach dem Aufruf von session.invalidate() immernoch mein User in der Session-Instanz, erst nach einem vollständigen Aktualisieren der Seite ist sie dann gelöscht. 

hier mein Code-Auszug:


```
void doLogin() {
  ...
  FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(KEY_USER, myUser);
}

public void doLogout() {  
  HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
  if (session != null) {
    session.removeAttribute(KEY_USER);
   //session.setAttribute(KEY_USER, null);
    session.invalidate();
  }
}

PhaseListener code (dieser überprüft, ob die Session existiert und verhindert den Zugriff auf geschützte Seiten, wenn der Benutzer nicht eingeloggt ist)

void afterPhase(PhaseEvent e) { 
  if (e.getFacesContext().getExternalContext().getSessionMap().containsKey(KEY_USER))
  {
    return;
  }
  else
  {
    // Navigiere zur Startseite
  }
}
```

Wäre euch dankbar für jede Hilfe!

Gruß
Christian


----------



## SlaterB (10. Mrz 2008)

den Test auf contains solltest du eine Zeile nach dem invalidate() machen,
bzw. nach dem simplen aber sicheren remove, wer weiß was invalidate() wirklich macht..

evtl. schaust du dir zwei verschiedene Sessions an,
oder irgendjemand setzt zwischendurch wieder den KEY_USER


----------



## maki (10. Mrz 2008)

Mach doch eine Action draus bzw gehe danach auf eine Action..


----------

