Come faccio a lasciare che un utente so che il suo / la sua sessione è scaduta?

StackOverflow https://stackoverflow.com/questions/2002303

  •  18-09-2019
  •  | 
  •  

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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top