Come utilizzerei AJAX per determinare se la sessione dell'utente è scaduta e quindi restituirli alla pagina di accesso?
-
08-07-2019 - |
Domanda
Nel seguente scenarioio, come posso utilizzare AJAX per verificare se la sessione è ancora attiva e quindi riportare l'utente alla pagina di accesso?
- L'utente accede e inizia a lavorare
- L'utente scompare per 10 minuti e la sessione scade
- L'utente ritorna sul proprio computer ed è ancora sullo schermo il 10 minuti fa
- 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 ()?
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.