¿Cómo usaría AJAX para determinar si la sesión del usuario ha expirado y luego devolverla a la página de inicio de sesión?

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

Pregunta

En la siguiente escena, ¿cómo podría usar AJAX para verificar si la sesión aún está activa y luego devolver al usuario a la página de inicio de sesión?

  1. El usuario inicia sesión y comienza a trabajar
  2. El usuario desaparece por 10 minutos y la sesión agota el tiempo de espera
  3. El usuario vuelve a su computadora y todavía está en la pantalla donde estaban hace 10 minutos
  4. El usuario envía su trabajo, pero volver a la pantalla de inicio de sesión (por mi verificación de estado de sesión existente) y los cambios no persisten

Idealmente, lo que busco es alguna forma de verificar el estado de la sesión cada 1 minuto para ver si el usuario está inactivo. Si están inactivos y la sesión está a punto de caducar, guardaría sus cambios temporalmente y luego, cuando la sesión caduque, cambiaría automáticamente la página a la pantalla de inicio de sesión antes de que el usuario regrese de estar inactivo.

¿También es posible hacer esto sin usar setTimeOut ()?

¿Fue útil?

Solución

La mayoría si esto se puede manejar del lado del servidor.

Siempre que haya actividad del usuario del lado del servidor: carga de página, llamada ajax, lo que sea, establezca una variable de sesión

Session["last_activty"]=DateTime.Now;

En sus llamadas AJAX y carga de página (podría hacer esto en una página maestra / página maestra anidada para páginas que requieren autenticación), marque (pseudocódigo)

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

Si la carga de la página o el método webmethod / webservice determinan en base a lo anterior que el usuario ha excedido el tiempo de espera,

a) redirigir a la página de inicio de sesión (lado del servidor), o

b) devuelva un código de estado a su interlocutor ajax que provocará una redirección o visualización de un diálogo de inicio de sesión.

NOTA : tenga cuidado con el uso de variables de sesión reales, ya que tienden a no funcionar bien / en absoluto en entornos de servidores en clúster. Un mejor lugar para este tipo de cosas es en su base de datos.

table Users
.ID
.last_activity datetime
.logged_in - calculated column which returns if GetDate()-LastActivity > 10 minutes.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top