Come utilizzerei AJAX per determinare se la sessione dell'utente è scaduta e quindi restituirli alla pagina di accesso?

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

Domanda

Nel seguente scenarioio, come posso utilizzare AJAX per verificare se la sessione è ancora attiva e quindi riportare l'utente alla pagina di accesso?

  1. L'utente accede e inizia a lavorare
  2. L'utente scompare per 10 minuti e la sessione scade
  3. L'utente ritorna sul proprio computer ed è ancora sullo schermo il 10 minuti fa
  4. L'utente invia il proprio lavoro, ma tornare alla schermata di accesso (entro il mio controllo dello stato della sessione esistente) e le modifiche non sono persistite

Idealmente quello che sto cercando è un modo per controllare lo stato della sessione ogni 1 minuto per vedere se l'utente è inattivo. Se sono inattivi e la sessione sta per scadere, salverei temporaneamente le loro modifiche e poi, quando la Sessione scade, cambierei automaticamente la pagina nella schermata di accesso prima che l'utente ritorni inattivo.

È anche possibile farlo senza usare setTimeOut ()?

È stato utile?

Soluzione

La maggior parte se questo può essere gestito sul lato server.

Ogni volta che c'è attività utente sul lato server - caricamento della pagina, chiamata ajax, qualunque cosa, imposta una variabile di sessione

Session["last_activty"]=DateTime.Now;

Nelle chiamate AJAX e nel caricamento della pagina (è possibile farlo in una pagina master / pagina master nidificata per le pagine che richiedono l'autenticazione), selezionare (pseudocodice)

if (DateTime.Now-DateTime.Parse(Session["last_activity"]) > 10 minutes)
  Session["logged_in"]=false;

Se il caricamento della pagina o il metodo webmethod / webservice determinano in base a quanto sopra che l'utente è scaduto,

a) reindirizzare alla pagina di accesso (lato server) o

b) restituisce un codice di stato al chiamante ajax che causerà un reindirizzamento o la visualizzazione di una finestra di dialogo di accesso.

NOTA : attenzione all'utilizzo di variabili di sessione reali in quanto tendono a non funzionare bene / affatto in ambienti server cluster. Un posto migliore per questo tipo di cose è nel tuo database.

table Users
.ID
.last_activity datetime
.logged_in - calculated column which returns if GetDate()-LastActivity > 10 minutes.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top