2010-01-15 5 views

Antwort

8

eine Klasse definieren, sagen SessionTimeoutIndicator, die javax.servlet.http.HttpSessionBindingListener die Schnittstelle implementiert.

Als Nächstes erstellen Sie ein Objekt SessionTimeoutIndicator und fügen Sie es der Benutzersitzung hinzu. Wenn die Sitzung entfernt wird, wird die Methode SessionTimeoutIndicator.valueUnbound() von der Servlet-Engine aufgerufen.

Sie können dann valueUnbound() implementieren, um die erforderliche Operation durchzuführen.

Ich hoffe, es ist jetzt geklärt.

+9

Mit nur 'HttpSessionListener # sessionDestroyed()' würde die Dinge einfacher machen. – BalusC

26

Ja zu überprüfen: eine null stattdessen kann HttpServletRequest.getSession(false) und Sie werden

  • rufen Sie erhalten von eine Sitzung, wenn noch keine aktiv ist.

  • Sie können einen Lifecycle-Listener (mit HttpSessionListener) in Ihrem web.xml definieren. Auf diese Weise können Sie benachrichtigt werden, sobald eine Sitzung in den Staub sticht.

+2

+1 für den zweiten Vorschlag. BTW, es ist gut, es zu benennen, also ist HttpSessionListener der eine. –

+2

Implementierung von 'HttpSessionListener' ist der Weg zu gehen. Klicken Sie einfach auf 'sessionDestroyed()'. – BalusC

21

Mit session.isNew können Sie abgelaufene Sitzungen nicht von völlig neuen Sitzungen unterscheiden. Sie können überprüfen, ob die Sitzung abgelaufen ist und/oder mit Zeitüberschreitung:

if (request.getRequestedSessionId() != null 
     && !request.isRequestedSessionIdValid()) { 
    // Session is expired 
} 

Verwenden getRequestedSessionId zwischen neuen und bestehenden (gültig/abgelaufen) Sitzungen und verwenden isRequestedSessionIdValid zu unterscheiden betwheen gültig und neue/abgelaufene Sitzungen zu unterscheiden .

Sie können diesen Code in eine Filter eingeben.

-1

Ich habe diese versucht

HttpSessionListener.sessionDestroyed() 

und dieses

if (request.getRequestedSessionId() != null 
     && !request.isRequestedSessionIdValid()) { 
    // Session is expired 
} 

beide arbeiten, aber nicht zu 100% Prozent Sie wissen, weil es zu zeigen hält „Session abgelaufen“, auch wenn wenn die App zum ersten Mal startet oben. Warum? Danke für die Hilfe.

Verwandte Themen