# richtige vorgehensweise beim logout



## freez (1. Dez 2006)

Hallo,

ich habe überlegt, wie ich ein sauberes Logout in meiner Applikation realisiere.

Ich arbeite mit Tomcat und habe ein paar JSP, eine Bean, die im sessionScope läuft, dazu und aktuell ein Servlet.

wenn ein User auf Logout klickt übergebe ich im request dem Servlet ein Parameter "status", der den Wert "logout" hat. Dies frage ich im Servlet ab und entnehme der session mit removeAttribute() die Bean.

Der User bekommt eine Seite gezeigt, in der er über den erfolgreichen Logout informiert wird und einen Link präsentiert, der ihn auf das Servlet weiterleitet. Der User klickt drauf.

Das Servlet holt sich mit getAttribute() die Bean aus der Session. Ist sie nun NULL (habe sie ja entfernt) bekommt der User die login Seite zu sehen.

Ist das so der richtige weg, wie man ein sauberes Logout macht? Wobei die Session genau genommen an sich ja noch existiert, aber die Bean nur neu instanziiert wird.

Ich habe es mit request.isRequestedSessionIdValid() und session.invalidate() versucht. aber wenn ich invalidate() ausführe, ist beim nächsten ServletAufruf request.isRequestedSessionIdValid()  true. Also kann ich das nicht benutzen. Das wäre natürlich eine schönere Lösung gewesen. 

Also schöner wäre es, wenn ich die Session sauber als abgeschlossen markieren könnte und beim nächsten Aufruf im selben Browserfenster eine neue Session aufgemacht wird.

Was meint ihr dazu?


----------



## SlaterB (1. Dez 2006)

selbst wenn das gehen würde, dann klappt das vielleicht nicht auf jeden WebServer,
das scheint meiner Erfahrung nach kein allgemein genutztes Feature zu sein und ist ja auch nicht notwendig,
du kannst ja selber die Session aufräumen bei einem Logout,


----------



## freez (2. Dez 2006)

Was heist bei dir aufräumen?


----------



## SlaterB (2. Dez 2006)

nun, das soll der neuen Session entsprechen die du wolltest,
also keine alten Daten wie User, besuchte Seiten usw.,
sondern ein ganz neuer Besuch,

alles alte entfernen, aufräumen


----------



## freez (2. Dez 2006)

Axo ... also ist der weg, den ich gehe gar nicht so verkehrt .... bean aus der Session löschen und beim nächsten AUfruf wieder neu erstellen.

Oder ich kann beim logout die bean aus der session löschen ... eine neue erstellen und dort ein Flag setzen, daß ich beim nächsten Aufruf sehe, daß dies ne jungfräuliche bean ist.


----------



## freez (2. Dez 2006)

wozu ist dann eigentlich die Methode invalidate() in der session gedacht?


----------



## SlaterB (2. Dez 2006)

wenn man das mal bei google eintippt kommen ungefähr Tipps wie du dir das gedacht hast 
http://www-128.ibm.com/developerworks/java/library/j-jtp07294.html

ich sage ja nicht, dass das nicht geht/ nicht gut ist,
ich sage nur dass es vielleicht/ anscheinend nicht sicher geht, 
und dass es auch anders geht, dass sich die Logik da selber helfen kann und nicht den Server bemühen muss,

bleibt das Problem, dass die Session noch weiter bis zum Timeout geöffnet bleibt (ohne invalidate()), 
also besser wäre schon mit


----------

