Come faccio a lasciare che un utente so che il suo / la sua sessione è scaduta?
Domanda
Ho impostato Tomcat per smaltire le sessioni dopo 15 minuti di inattività. Qualcosa di simile a questo
<session-config>
<session-timeout>15</session-timeout>
</session-config>
Ogni volta che un utente accede a una pagina ristretta (uno che richiede all'utente di effettuare il login) Posso controllare la sessione per vedere se il processo di login è stato completato. Se è quindi l'accesso è concesso se non è allora l'utente viene reindirizzato alla pagina di login dove lui / lei si richiede con un documento d'identità valido e una password. Se un timeout della sessione poi fuori l'utente è tenuto a effettuare nuovamente il login. E questo va bene, ma vorrei per consentire all'utente di sapere che lui / lei deve Logi di nuovo perché la sessione è scaduta.
Come faccio a fare questo? Ho trovato l'interfaccia HttpSessionListener e ho pensato che potrebbe aiutare, ma il metodo sessionDestroyed si chiama proprio prima che la sessione viene invalidata in modo da impostare un parametro non c'è alcun bene, come previsto.
Soluzione
Al login, impostare una lunga cookie di vivere (1 giorno?), Che si rimuove (età set a 0) nel corso di una disconnessione normale. Se atterrate nella pagina di login di nuovo mentre l'utente non è connesso e il cookie è ancora presente, allora vuol dire che la sessione è scaduta.
<c:if test="${empty user && not empty cookie.user}">
You were logged out because the session was expired.
</c:if>
Altri suggerimenti
Quando si reindirizza l'utente al form di login, impostare un parametro di richiesta, parametro URL o cookie che indica che la sessione è scaduta (cancellare il cookie una volta visualizzato il modulo di login, se si utilizza un cookie). Poi, quando si visualizza il modulo, controllare l'indicatore di sessione scaduta e mostrare un messaggio appropriato.
È possibile controllare se la sessione è scaduta e / o scaduta con:
if (request.getRequestedSessionId() != null
&& !request.isRequestedSessionIdValid()) {
// Session is expired
}
Usa getRequestedSessionId
di distinguere tra le sessioni di nuovi ed esistenti (valido / scaduto), e utilizzare isRequestedSessionIdValid
distinguere betwheen sessioni valide e nuove / scaduti.
È possibile inserire questo codice in un Filtro .