¿Cómo puede una devolución de llamada Ajax darse cuenta de que la sesión de un usuario autenticado ha agotado el tiempo?

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

Pregunta

Estoy usando Django y jQuery para implementar sesiones autenticadas y peticiones Ajax.

He autenticado tiempos de espera de sesión para usuarios autenticados cerrar la sesión después de un largo período de inactividad en mi sitio. Algunas de las páginas en mi sitio tienen una gran cantidad de llamadas AJAX para los que se requiere que el usuario esté en una sesión autenticada. Cuando un usuario deja una página parecido abierta durante mucho tiempo y tiene la sesión de auto-agotado el tiempo, todas las llamadas hechas AJAX sólo va a fallar y mostrar un error del navegador. Mi pila web (Django) devuelve una redirección a iniciar sesión para estas peticiones AJAX, pero que sólo se muestran como errores a $ .ajax () (usando jQuery.)

¿Cómo podría recargar la página y enviar al usuario a la página de inicio de sesión a través de una petición AJAX cuando encuentro que su sesión de autenticación ha caducado?

¿Fue útil?

Solución

Una forma sería tener un guión que acaba de ping una página para ver si es o no todavía está conectado, pero esto aumentaría el número de AJAX pide que lo tienes que hacer.

Otra opción es tener la función de complete $.ajax() comprobar el código de estado HTTP en el objeto XMLHttpRequest que se pasa en:

$.ajax({..., complete = function(xhr, textStatus){
    if(xhr.status > 300 && xhr.status < 400) //you got a redirect
        window.location.href = '/login/';
    ...
    }, ...);

Otros consejos

simple en realidad, tiene cualquier script que está consultando regresar algún tipo de código de error, tal vez

{'error', 'notloggedin'}

A continuación, todo lo que tiene que hacer es comprobar para este valor en su Javascript. Si se descubre, a continuación, hacer algo como

window.location.href = '/login/';

para hacer el redireccionamiento de JavaScript a la página de inicio de sesión (cambiar la ruta si es necesario)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top