Как обратный вызов Ajax может понять, что время ожидания сеанса аутентификации пользователя истекло?

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

Вопрос

Я использую django и jquery для реализации аутентифицированных сеансов и Ajax-запросов.

Я установил тайм-ауты сеанса аутентификации, чтобы авторизованные пользователи выходили из системы после длительного периода бездействия на моем сайте.На некоторых страницах моего сайта содержится множество вызовов AJAX, которые требуют, чтобы пользователь находился в сеансе аутентификации.Когда пользователь оставляет такую страницу открытой в течение длительного времени и время ожидания сеанса автоматически истекает, любые выполненные вызовы AJAX просто завершатся неудачей и покажут ошибку браузера.Мой веб-стек (django) возвращает перенаправление на login для этих AJAX-запросов, но они просто отображаются как ошибки в $.ajax() (с использованием jquery.)

Как я мог бы перезагрузить страницу и отправить пользователя на страницу входа через AJAX-запрос, когда я обнаружу, что время ожидания их сеанса аутентификации истекло?

Это было полезно?

Решение

Одним из способов было бы создать скрипт, который просто выполняет пинг страницы, чтобы узнать, по-прежнему ли она зарегистрирована, но это увеличило бы количество AJAX-запросов, которые вам пришлось бы выполнять.

Другой вариант заключается в том, чтобы иметь complete функция $.ajax() проверьте код состояния HTTP в объекте XMLHttpRequest , который передается в:

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

Другие советы

На самом деле все просто, попросите любой скрипт, который вы запрашиваете, вернуть какой-то код ошибки, возможно

{'error', 'notloggedin'}

затем все, что вам нужно сделать, это проверить наличие этого значения в вашем javascript.Если он найден, вы затем делаете что-то вроде

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

чтобы перенаправить javascript на страницу входа в систему (изменяя путь по мере необходимости)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top