2012-04-03 18 views
8

Lo scenario è che un utente debba ricevere una notifica (ad esempio tramite un tipico avviso JS o reindirizzamento ecc.) Quando la sua sessione sta per scadere. Un paio di modi in cui questo può essere fatto èGestione del timeout della sessione sul lato client

  1. Utilizzo di javascript time out funzione come spiegato here.
  2. Utilizzare Server Push utilizzando WebSockets che, ovviamente, richiederebbe il supporto HTML5.

Quali sono i relativi meriti/demeriti di questi due approcci? Oltre a questi, ci sono altri modi per raggiungere questo obiettivo (alcune librerie standard ecc.). Il mio back end è Java EE (Struts + Spring).

risposta

6

Utilizzando la funzione di timeout javascript, è necessario assicurarsi che se l'utente sta effettuando qualsiasi chiamata AJAX, la funzione deve essere ripristinata in quanto dovrebbe essere trattata come attività dell'utente.

Se il server utilizza il push tramite websockets potresti non essere in grado di indirizzare gli utenti con browser non recenti. Potrebbe essere necessario utilizzare alcuni quadri di segnalazione e persino modificare il tuo stack di backend. (Posso pensare a socket.io & SignalR a partire da ora)

Entrambi gli approcci non si degradano con grazia. Pertanto, l'opzione javascript di IMO sembra migliore in quanto può indirizzare un pubblico più ampio e ciò richiederebbe di affrontare alcuni scenari limite. Se avessi una scelta, non implementerei affatto questa funzione. Ma difficilmente succede in questo modo.

UPDATE: Ecco un altro approccio che potrei pensare.

Ogni volta che viene visualizzata una pagina, vorrei inviare un cookie a cui è possibile accedere dal lato client che conterrà l'ora UTC in cui la sessione scadrà. Nel mio codice inserisco un setInterval che legge il valore e confronta l'ora locale con UTC e, se chiude, visualizza una finestra popup che dice che il timeout avverrà in X secondi ecc.

Anche questo non si degrada con garbo e dipende dal tempo della macchina client. Quindi, se è sbagliato questa funzionalità non funzionerà in modo affidabile.

1

Che dire creare un filtro in cui si imposta un cookie con il numero di secondi rimasti fino al timeout?

Quindi, sarà sempre impostato tale valore (> session-timeout di sessione-config) * 60.

Nella parte anteriore, utilizzando setInterval, si dovrebbe aggiornare tale valore del cookie sottraendo l'intervallo al valore attuale del cookie, in questo modo non dipende dalla configurazione del tempo.

+0

È anche sicuro. Il timeout della sessione lato client può essere facilmente aggirato iniettando il codice js come tramite un plug-in che aggiorna il contatore ogni (tempo di logout - 1) –

Problemi correlati