Automatische Abmeldung, sobald die Sitzung abläuft
-
12-09-2020 - |
Frage
Unsere Anwendung meldet sich nach 30 Minuten ab und wird zur Anmeldeseite weitergeleitet. Ich spezifiziere das Sitzungszeitlimit in web.xml und verwende einen requestProcessor für die Umleitung. Ich möchte dem Benutzer eine Meldung anzeigen, dass Ihre Sitzung abgelaufen ist, sobald die Sitzung abgelaufen ist, wie Kann ich das machen? Automatische Abmeldung?Ich möchte die Fehlermeldung auf der Seite „Die Sitzung ist abgelaufen, bitte melden Sie sich erneut an“ anzeigen.Wie kann ich dann feststellen, dass die Sitzung abgelaufen ist?Werden irgendwelche Methoden automatisch ausgelöst?
Lösung
Erstellen Sie eine Aktivitätsprüfung, die jede Minute prüft, wenn eine Benutzeraktivität stattgefunden hat (MUSECLICK, TECKPRESS) und führt einen Herzschlag auf der Serverseite aus, um die Session am Leben zu halten, wenn der Benutzer aktiv ist und nichts tut, wenn der Benutzer nicht aktiv ist.Wenn es keine Aktivität für 30 Minuten gibt (oder ein unabhängiges Standardsitzungs-Timeout auf der Serverseite eingestellt ist), führen Sie dann eine Weiterleitung aus.
Hier ist ein Kickoff-Beispiel mit wenig Hilfe von jQuery , um Klick- und Keypress-Ereignisse zu binden und Ereignisse und Feuer-Ajax-Anfrage zu binden.
generasacodicetagpre.Erstellen Sie einen generationspoDicetagcode, der auf dem generationspoDicetagcode hört und grundsätzlich nur das folgende ist:
generasacodicetagpre., um die Sitzung am Leben zu halten.
Wenn Sie den angemeldeten Benutzer in der Sitzung speichern, ist es "automagisch", wenn die Sitzung abläuft.So müssen Sie den Benutzer nicht manuell abmelden.
Andere Tipps
Erstellen Sie eine Implementierung einer Listener-Klasse HttpSessionListener
und definieren Sie es in web.xml
Dadurch werden Sie benachrichtigt, wenn eine Sitzung zerstört wird.Benutzen Sie die sessionDestroyed()
Methode.
Ein vollständiges Beispiel finden Sie hier:
http://www.mkyong.com/servlet/a-simple-httpsessionlistener-example-active-sessions-counter/
Entweder kann ein einfaches Servlet sein, Spring-MVC- oder Spring-Security-Auto-Logout ist ohne perfekte Client-Seitenteil nicht möglich.
In Anbetracht des Antrags haben beide Antragsart
- ajax und
- Formular Einreichung / Seite neu laden
Auto-Logout benötigt sehr berechnete Logik. Präsentation meiner Autologout-Funktionalität Implementierung mit dem folgenden
Vorteile.
1. Um dies zu erreichen, wird kein zusätzlicher Anruf / Anfrage verwendet. Berücksichtigung der Leistungswirkung, wenn mehr als 10k aktive Benutzer und zusätzliche Anrufe zur Erreichung des automatischen Abmeldens.
2. Eine Zeilenkonfiguration mit Tag.
3. funktioniert einwandfrei, auch wenn der Benutzer mehrere Registerkarte oder mehrere Fenster öffnet.
4. Es intimiert Sie vor 30 Sekunden der Ungültigheit der Sitzung. Wenn Sie also Formular ausfüllen und nicht eingereicht haben, können Sie die Session Live aufbewahren (Session von einem Klick erweitern). Der Benutzer verliert also weniger wahrscheinlich nicht gespeicherte Daten.
uage
HINWEIS: Es kann auf der Seite AutoloGout-Script-Vorlage verschoben werden, wenn Sie bei CSS gut sind. Daher können Sie vermeiden, dies in jeder Seite hinzuzufügen.
Fügen Sie Bootstrap ein oder fügen Sie Ihre benutzerdefinierten CSS hinzu.
Das ist alles um eine einfache Auto-Logout-Implementierung.
Sie können das Arbeitsbeispiel aus meinem Github-Repository herunterladen
Autologout mit einfachem Servlet Beispiel
Autologout mithilfe von Federschutz Java Configuration Beispiel Kummer
Autologout mit dem Spring-Security-XML-Konfigurationsbeispiel
Logik erklärt
Hier ist die Logik einfach, auf der Seitenlast-Set-Timer von Intervall-EQULAS in maxinactiveInterval. Nach dem Timeout umleiten Sie zur Anmeldung.
Berücksichtigen Sie nun AJAX-Anfragen, können Sie .ajaxstart () oder .ajaxcompete () Rückrufe von jQuery verwenden, so dass, wenn eine AJAX-Anforderung abgefeuert wird, das Intervall zurücksetzen.
Die Kommunikation von Intertab wird durchgeführt, um den Status jeder Registerkarte zu synchronisieren. Gebrauchte LocalStorage bei Änderungsveranstaltung.
Einschränkungen / Verbesserungen erforderlich
1. Wenn die maximal zulässige Sitzung eins ist, ist die Sitzung von einer Sitzung von einem anderen System aus, die AJAX-Anforderung fehlschlägt. Es muss behandelt werden, um die Anmeldeseite umzuleiten.
2. Verwenden Sie AJAXSTART () anstelle von ajaxcomplete (), um die exakte Synchronisierung von idletime-Werten zwischen Server und Browser zu haben.
Anforderungen
1. jquery
Alternativen zur aktuellen Implementierung im Vergleich von
1. REFRESH-Header setzen in der HTTP-Antwort. (funktioniert nicht für AJAX-Anforderungen)
generasacodicetagpre.
- Einstellung META Refresh Tag in HTML (funktioniert nicht für AJAX-Anforderungen) generasacodicetagpre.
- Konfigurieren der Aktivitätsprüfung
Hält die Sitzung am Leben mit wiederholter AJAX-Anforderung. Tracks Leerlaufzeit und macht die Abmeldeanfrage nach dem Timeout.
Zweifellos ist es ein gutes mit einfacher Logik. Aber ich möchte nur meine Beobachtungen umkippen.- Performance-Auswirkungen Wenn pro Minute 2 Anfragen vorgenommen werden, um die Session-amerikanische und 50.000 aktive Benutzer zu halten. 100k Anfragen pro Minute.
Wenn Sie Servlet-Sitzungen verwenden, können Sie überprüfen, ob die Sitzung, ob die JSP / SERVLET zurückgibt, neu mithilfe der ISNEW () -Methode ist.Wenn ja, ist die Benutzersitzung abgelaufen und Sie können die relevanten Nachrichten anzeigen.
Fügen Sie eine JavaScript-Dienstprogrammfunktion in Ihrem JSP ein und ping den Server alle 31 Minuten. Die oben erwähnte Dienstprogrammfunktion sollte mit SETTIMEOUT () jS intern mit intern verwendet werden.
generasacodicetagpre.Beachten Sie, dass
Prüferversion ()
ist eine reguläre JS-Funktion, die HTTP-Anforderungen feuern kann.Wenn die Anforderung erfolgreich ist, zeigt die Sitzung ansonsten die Aufforderung zum Benutzer.