Wie unterscheiden Sie zwischen logout und session abgelaufen?
Fall 1: Abmelden : wenn wir Einmal Abmelden, wenn man versucht, auf den vorherigen, es muss automatisch umgeleitet, um sich einzuloggen.jsp
Fall 2: die Sitzung ist abgelaufen : Wenn eine Sitzung abläuft, wenn der Benutzer noch angemeldet sind, muss es versuchen, automatisch umleiten zu sessionExpired.jsp, wenn die Vorherige Seite wird aufgerufen.
Wie zu unterscheiden ? Ich bin derzeit ungültig-Sitzung beim Abmelden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim login ein cookie gesetzt, mit einem langen Ablauf (> 24 Stunden). Entfernen Sie diesen cookie beim logout Zeit, indem Sie die maxage auf 0.
Können Sie überprüfen, für alle nicht-angemeldete Benutzer (d.h. ungültige session-id).
Wenn das cookie nicht vorhanden ist, leiten Sie ihn zur Anmeldung.jsp
Wenn das cookie vorhanden ist, bedeutet es, dass seine session abgelaufen, so umzuleiten, ihn zu Sitzung abgelaufen ist.jsp
Können Sie testen, abgelaufene Sitzungen mit der überprüfung, ob
HttpServletRequest#getRequestedSessionId()
nicht zurücknull
(was bedeutet, dass der client geschickt hat, wird ein Sitzungs-cookie und so wird davon ausgegangen, dass die session noch gültig ist) undHttpServletRequest#isRequestedSessionIdValid()
zurückfalse
(was bedeutet, dass die Sitzung abgelaufen ist, auf der server-Seite).In einer Mutter:
Kein Grund zur Hektik mit extra-cookies. Anzeigen dieser
Filter
auf eineurl-pattern
abdecken der geschützten Seiten (und also ohne die sessionexpired und login-Seiten!).Vergessen Sie nicht, deaktivieren das Zwischenspeichern von Seiten, die vom browser auf den geschützten Seiten, ansonsten der webbrowser lädt Sie aus dem cache, wenn du zurück bist in der browser-Geschichte, anstatt eine neue Anfrage an den server. Dies können Sie erreichen, indem Sie die folgenden in den gleichen filter, vor
Chain#doFilter()
nennen.Wenn es nach mir ginge, würde ich klar die Sitzung auf Abmelden, und erstellen Sie ein boolescher Wert, in der es heißt HasLoggedOut dann setzen Sie diese auf true. Dann, falls diese bool-exists-in-Sitzung-Sie wissen, dass Sie abgemeldet sind, wenn nicht, dann wird die Sitzung entweder Zeitüberschreitung, oder der Benutzer noch nie angemeldet alle.
Als Sie kann immer noch nicht unterscheiden zwischen der Zeitüberschreitung und nicht angemeldet, ich in der Regel machen die Entscheidung, dass, wenn Sie der Anfrage einen authentifizierten Seite werde ich nur senden Sie an die session-timeout-Seite, die auch verdoppelt sich wie eine login-Seite, die sagt so etwas wie
"Hoppla, wir wissen nicht, wer du bist, entweder ist Ihre Sitzung abgelaufen oder Sie haben sich noch nicht angemeldet haben, loggen Sie sich bitte unter"
Dieser dann bietet Sie für beide Szenarien