2012-11-07 17 views
5

Sto cercando di impostare il mio timeout applicazione su Tomcat 7 app server.First sto testando con il mio timeout di un minuto, in web.xml comeTimeout impostato nel web.xml non funziona in java

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

e sto usando HttpSessionListener per assicurarmi che il mio Timeout funzioni correttamente. Ho dichiarato la mia classe sessionListener in web.xml.

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()); 
    } 
} 

e in web.xml

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

Ma quando iniziare il mio server e lanciare la mia domanda vedo sessione viene avviata solo sulla pagina di Login.

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

e quando rimango inattivo per più di un minuto o alcune volte più di cinque minuti causa Tomcat non sparare Timeout immediatamente nella mia applicazione e fare clic su qualcosa nella mia sessione di applicazione non è Expired.Still Sono in grado di navigare un'altra pagina. Ma quando sono inattivo sulla pagina di accesso o disconnesso vedo che la sessione è stata distrutta. Ma una volta che il login è terminato e quando sono dentro il timeout della sessione dell'applicazione non sta accadendo. Vedo

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

Cosa sto facendo male? E anche dopo aver menzionato lo <session-timeout> nel web.xml ho bisogno del codice session.invalidate da qualche parte nel Codice? Come posso reindirizzare a login.xhtml nella sessione distrutta in JSF?

+0

Dov'è la logica che crea la sessione? Dove accedi per la prima volta a un bean '@ SessionScoped'? Per prima cosa controlli le sessioni attive prima di onorare una richiesta o ne crei una nuova in modo silenzioso? – kolossus

+0

Controllare [Gestione timeout sessione su richiesta JSF AJAX] (http://stackoverflow.com/q/11203195/1065197) –

+0

@kolossus ... Quando avvio la mia applicazione, la pagina di accesso colpirà Bean login che è Session Scoped. E al momento del login non stiamo controllando da nessuna parte! (Session.isNew()). Immagino che stia creando una nuova sessione. – SRy

risposta

7

Fare nulla di sbagliato. Un thread in background controllerà ogni x minuti per, quando le sessioni scadono. Questo è specifico del contenitore. Vale a dire non è garantito che sia scaduto dopo l'orario specificato. So che in tomcat puoi facilmente modificare questo intervallo di controllo nel file server.xml.

+1

Ma perché la mia sessione non viene distrutta quando sono connesso e all'interno dell'applicazione? – SRy

+0

stesso motivo. Se l'intervallo di controllo è maggiore del valore di timeout, non sarà ancora distrutto. –

+2

@MarcusBlackhall dove nel server.xml devo impostare l'intervallo? – confile