Abbiamo un'applicazione ASP.NET MVC interna che richiede un accesso. Accedi funziona alla grande e fa ciò che è previsto. Abbiamo una scadenza di sessione di 15 minuti. Dopo essersi seduto su una singola pagina per quel periodo di tempo, l'utente ha perso la sessione. Se tentano di aggiornare la pagina corrente o di passare a un'altra, otterranno una pagina di accesso. Manteniamo la richiesta archiviata, quindi, una volta effettuato l'accesso, possono continuare a visitare la pagina richiesta. Funziona alla grandeScadenza sessione MVC ASP.NET
Tuttavia, il mio problema è che su alcune pagine ci sono chiamate AJAX. Ad esempio, possono compilare parte di un modulo, vagare e lasciare scadere la sessione. Quando tornano, lo schermo è ancora visualizzato. Se si limita a compilare una casella (che effettuerà una chiamata AJAX), la chiamata AJAX restituirà la pagina di accesso (all'interno di qualsiasi div l'AJAX avrebbe dovuto semplicemente restituire i risultati effettivi). Questo sembra orribile.
Penso che la soluzione sia quella di far scadere la pagina stessa (in modo tale che quando una sessione viene terminata, vengono automaticamente restituiti alla schermata di accesso senza alcuna azione da parte loro). Tuttavia, mi chiedo se ci sono opinioni/idee su come meglio implementare questo in particolare per quanto riguarda le migliori pratiche in ASP.NET MVC.
Aggiornamento:
Così sono andato avanti e implementato questo nel mio OnActionExecuting
(per suggerimento di Keltex)
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.Write("Invalid session -- please login!");
filterContext.HttpContext.Response.End();
}
else
{
...
}
}
Questo rende sicuramente meglio le cose - ora anche se hanno due schede (una con alcune chiamate AJAX che possono attivare) e si disconnettono esplicitamente nella seconda scheda, otterranno immediatamente qualcosa che ha più senso piuttosto che un mucchio di dati AJAX rovinati.
Continuo a pensare che implementerò anche il conteggio alla rovescia di Javascript che suggeriva Womp.
@Andrew - Questa è una soluzione elegante. Altrimenti, filterContext.HttpContext.Response.Redirect ("/ error/xxx"); (o qualcosa) funziona? – Keltex
@Keltex: posso spostarlo su una vista come suggerito, ma in molte delle mie chiamate AJAX, restituiscono dati non elaborati (come un elenco di valori) senza HTML, mentre in altri restituiscono forse un'intera tabella di dati ben formattati.Quindi un "minimo comune denominatore" di soli dati grezzi può funzionare meglio. Ci giocherò. –