Session abgelaufen und direkter Aufruf

Status
Nicht offen für weitere Antworten.

freez

Top Contributor
Hallo,

ich habe hier eine JSF/Facelets/Ajax4JSF Anwendung mit Datenbank im Hintergrund. Ich suche nach Best Practise Methoden, wie ich mit dem direkten Aufrufen von JSF Seiten und Session TimeOuts umgehen.

Viele von euch haben bestimmt schon Berührung mit den Themen gehabt:
1. Ein User klickt nach langer Inaktivität (> SessionTimout) auf einen Link, weil er nach dem Mittagessen weitermachen will. Wichtige Daten in der Session (z.B. Userdaten) sind verloren. Die Seite wird nicht richtig dargestellt und auch Klick auf Links könnten ungewollte Funktionen auslösen und unvorhersagbare Daten speichern oder laden.

2. Ein User speichert sich eine JSF Seite in seinen Favoriten. Beim Klick zwei Wochen später auf den Favorit fehlen in den Beans wichtige Informationen, die eigentlich in der Session waren. Hier ist dann das Problem, das es eine klare Struktur für die Navigation gibt, und das ein Einstieg dazwischen einfach nicht möglich ist, weil wichtige Informationen auf den vorhergehenden Seiten in der Bean gespeichert werden.

Ich freue mich über viele Antworten und geizt bitte nicht mit Details. Bitte auch mit ein paar Codeschnipsel hinzufügen, wenn ihr was habt.

Vielen Dank.
 
Ich möchte natürlich gleich der erste sein ... ich habe nämlich auch einen Ansatz:

zu 1.: ein Cookie bei jedem erfolgreichen Request beim Client setzen. Sollte die Session ablaufen und der User klickt doch mal drauf, wird das Cookie geladen und damit die richtigen Daten geladen. Ist Clientseitig. Aber besser als nix und hilft auch leider nix bei Speicherung der URL in den Lesezeichen (jedenfalls nur begrenzte Zeit)

zu2.: ein iframe, welches entweder direkt aufgerufen wird, oder über ein Servlet gesendet. Darin laufen dann alle jsf- Seiten ab, ohne dass der User in seinem Browser ein Änderung in der Adressleiste bemerkt. Ein Speichern in den Lesezeichen speichert nur den Einstiegspunkt.
 
1. Ein sog. SessionTimeoutFilter kümmert sich darum
2. GET zugriffe werden mit einem autom. Logout geahndet
 
Ja, das ist der Sinn der Filter 😉

Manche Filter (zB. Ajax4Jsf) setzen aber eine bestimmte Sequenz voraus (A4J muss immer der erste sein), aber normalerweise gibt es diese Einschränkung nicht.
 
maki hat gesagt.:
Ja, das ist der Sinn der Filter 😉

Manche Filter (zB. Ajax4Jsf) setzen aber eine bestimmte Sequenz voraus (A4J muss immer der erste sein), aber normalerweise gibt es diese Einschränkung nicht.

Bin heute nicht auf der Höhe! Ich benutze ja bei meinem aktuellen Projekt eh auch schon 2 Filter..danke für die Info.
 
THX @ maki: zu Punkt 1: habe gleich deinen Vorschlag mit meiner Lösung kombiniert. Frägt der User an,ohne eine gültige Session, wird in dem SessionTimeoutListener nach dem Cookie geschaut und falls vorhanden die Session wieder initiiert und auf eine bestimmte Seite geleitet. Falls nicht vorhanden, kommt eine Fehlerseite mit TimeOut und nen Link zur Startseite. Ich überlege noch, ob ich im ersten Fall mit Cookie ne Meldeseite dazwischenschalte und dem User darüber informiere, dass er zu lang weg war. Haltet Ihr es für sinnvoll?

2. GET zugriffe werden mit einem autom. Logout geahndet

Kannst du den Punkt etwas vertiefen? Mir fehlt ein Anfang für die Realisierung und überhaupt die Vorstellung, wie sich das dem User präsentiert.
 
Ich überlege noch, ob ich im ersten Fall mit Cookie ne Meldeseite dazwischenschalte und dem User darüber informiere, dass er zu lang weg war. Haltet Ihr es für sinnvoll?
Weiss ehrlich gesagt nicht wie man Sessions reinitialisiert, aber das Vorgehen auf eine best. Seite weiterzuleiten aus dem Filter (Your Session has expiriered oder so ähnlich) mit Link auf die Loogin Serite ist so gut wie immer so umgesetzt, also Standard 🙂

Kannst du den Punkt etwas vertiefen? Mir fehlt ein Anfang für die Realisierung und überhaupt die Vorstellung, wie sich das dem User präsentiert.
Nun, die Frage ist eigentlich, ob ihr sowas wie "permalinks" für Favouriten etc. anbieten müsst, dann müssten die nötigen Daten in der URL mitgeschickt werden... dass das nicht trivial ist leuchtet ein.

Relativ einfach ist es allerdings, alle GET requests zu blocken (also URLS im Browser), navigiert werden kann nur ausschliesslich durch die Anwendung selbst.
Das einzig hakelige kann sein, alte Anwendungen so umzurüsten, das nur noch POST requests versendet werden.
 
Weiss ehrlich gesagt nicht wie man Sessions reinitialisiert
reinitialisieren ist der verkehrte Ausdruck. Besser ist wohl die neue Session so initialisieren, dass die Beans alle benötigten Informationen haben. Ich benötige dazu nur einen bestimmten String in der Session. Den kann ich mir aus dem Cookie holen. Ist ne Information, die der User eh kennt und was auch gern anderen bekannt sein darf, also nix geheimes. So kriege ich wieder eine saubere Session.

Relativ einfach ist es allerdings, alle GET requests zu blocken

Wie realisiere ich das? Mir fällt nix gescheites dazu ein.

Nun, die Frage ist eigentlich, ob ihr sowas wie "permalinks" für Favouriten etc. anbieten müsst
einen solchen Permalink habe ich bereits. Dieser geht auf die Startseite der Anwendung selbst. Dahinter steckt ein Servlet, welches die Session entsprechend initialisiert, damit auch auf der Startseite was gescheites ausgegeben wird. Eigentlich wäre es mir lieb, wenn während der gesamten Zeit dieser URL angezeigt wird auch bei Navigation durch die Anwendung. Deswegen auch das iframe.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben