Как обратный вызов Ajax может понять, что время ожидания сеанса аутентификации пользователя истекло?
-
05-09-2019 - |
Вопрос
Я использую 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 на страницу входа в систему (изменяя путь по мере необходимости)