2012-11-07 5 views
5

Ich versuche, meine Anwendung Timeout auf Tomcat 7 App einzurichten server.First Ich teste mit meinem Timeout als eine Minute lang in web.xml alsTimeout in der web.xml gesetzt funktioniert nicht in Java

<session-config> 
     <session-timeout>1</session-timeout> 
    </session-config> 

und ich verwende HttpSessionListener, um sicherzustellen, dass mein Timeout funktioniert. Ich habe meine sessionListener-Klasse in web.xml deklariert.

public class HttpSessionChecker implements HttpSessionListener { 

    public void sessionCreated(HttpSessionEvent event) { 
     System.out.printf("Session ID %s created at %s%n", event.getSession().getId(), new Date()); 
    } 
    public void sessionDestroyed(HttpSessionEvent event) { 
     System.out.printf("Session ID %s destroyed at %s%n", event.getSession().getId(), new Date()); 
    } 
} 

und in web.xml

<listener> 
    <listener-class>com.test.util.HttpSessionChecker</listener-class> 
</listener> 

Aber wenn mein Server starten und meine Anwendung starten Ich sehe Sitzung auf der Login-Seite nur eingeleitet wird.

Session ID 934073ED5E9933158995EE5EB680D3F7 created at Wed Nov 07 09:39:13 PST 2012 

und wenn ich für mehr als eine Minute oder einige Male mehr als fünf Minuten Ursache Tomcat Idle bleiben nicht Timeout Feuer sofort in meiner Anwendung, und klicken Sie auf etwas in meiner Anwendung Session ist nicht Expired.Still Ich bin in der Lage, eine andere Seite zu navigieren.Aber wenn ich bleibe auf der Anmeldeseite oder abgemeldet sehe ich die Sitzung zerstört ist. Aber wenn einmal die Anmeldung abgeschlossen ist und wenn ich mich in der Anwendungssitzung befindet, tritt kein Timeout auf. Ich sehe

Session ID 934073ED5E9933158995EE5EB680D3F7 destroyed at Wed Nov 07 09:42:13 PST 2012 

Was mache ich falsch? Und selbst nachdem ich <session-timeout> in web.xml erwähnt brauche ich Code session.invalidate irgendwo in Code? Wie kann ich in einer in JSF zerstörten Sitzung zu login.xhtml umleiten?

+0

Wo ist die Logik, die Ihre Sitzung erstellt? Wo greifen Sie zuerst auf eine '@ SessionScoped'-Bean zu? Suchen Sie zuerst nach aktiven Sitzungen, bevor Sie eine Anforderung erfüllen, oder erstellen Sie stillschweigend eine neue Sitzung? – kolossus

+0

Überprüfen Sie [Sitzung Timeout Behandlung auf JSF AJAX-Anfrage] (http://StackOverflow.com/Q/11203195/1065197) –

+0

@Kolossus ... Wenn ich meine Anwendung starten, wird Login-Seite Login Bean, die Session Scoped ist. Und zum Zeitpunkt der Anmeldung überprüfen wir nirgendwo! (Session.isNew()). Ich denke, es ist eine neue Sitzung erstellen. – SRy

Antwort

7

Sie tun nichts falsch. Ein Hintergrund-Thread überprüft alle x Minuten nach Ablauf der Sitzungen. Dies ist containerspezifisch. Dh es ist nicht garantiert, dass sie nach der angegebenen Zeit abgelaufen sind. Ich weiß in Tomcat können Sie dieses Prüfintervall in der Datei server.xml leicht ändern.

+1

Aber warum ist meine Sitzung nicht zerstört, wenn ich eingeloggt bin und in der Anwendung? – SRy

+0

gleichen Grund. Wenn das Überprüfungsintervall größer als der Zeitüberschreitungswert ist, wird es noch nicht zerstört. –

+2

@MarcusBlackhall Wo muss ich in der server.xml das Intervall einstellen? – confile