Как обратный вызов Ajax может понять, что время сеанса аутентифицированного пользователя истекло? - PullRequest
3 голосов
/ 07 апреля 2009

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

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

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

Ответы [ 2 ]

7 голосов
/ 10 апреля 2009

Одним из способов может быть сценарий, который просто пингует страницу, чтобы узнать, вошел ли он в систему или нет, но это увеличит количество запросов 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/';
    ...
    }, ...);
1 голос
/ 07 апреля 2009

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

{'error', 'notloggedin'}

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...