Обработка запросов AJAX, если сеанс истек - PullRequest
3 голосов
/ 11 октября 2011

В моем приложении (ASP.NET MVC 3 RAZOR), когда сеанс заканчивается и пользователь пытается получить доступ к чему-либо, он перенаправляет их на страницу входа для повторного входа.

Это нормально, но при вызове из запросов ajax (например, если пользователь некоторое время оставлял свой экран без активности), он загрузит форму входа в запрос ajax ... Это не то, что я хочу случается.

Как лучше всего справиться с этим? В идеале я хотел бы показать модальный режим, если сеанс истек, чтобы пользователь не мог получить доступ к другим областям. Таким образом, даже если они покинут экран, некоторые jQuery проверит сессию, а затем применил модальное сообщение «Session Expired»

Как бы я это сделал?

, например

if(SESSION HAS EXPIRED) { showModal(); }

Ответы [ 3 ]

3 голосов
/ 11 октября 2011

Я вижу здесь две отдельные адресуемые проблемы, поэтому я буду обсуждать их по отдельности.

Логин возвращен как результат AJAX :
Вместо того, чтобы просто вернуться на экран входа в систему, верните сообщение о том, что сеанс истек. Если ваш AJAX получает такое сообщение, он знает, что пользователь должен войти в систему. На этом этапе вы можете сделать что-то вроде

window.location = loginpageurlhere;

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

Отображение диалогового окна, если пользователь слишком долго неактивен :
Для этого вам нужно знать, как долго пользователь неактивен. Вы можете сделать это несколькими способами, один из которых выглядит следующим образом:

  • Когда страница загружается, инициализируйте переменную для использования в качестве обратного отсчета.
  • Установите таймер, который будет уменьшать счетчик каждый раз, когда у него заканчивается время, а затем перезапускается.
  • Если счетчик когда-либо достигнет нуля, отобразите диалоговое окно и снова войдите в систему.
  • Каждый раз, когда происходит действительное действие (сообщение AJAX или что-то еще, что у вас может быть), сбрасывайте счетчик.

Вы можете использовать любой из этих методов, хотя, если вас беспокоит защита данных на автоматическом компьютере, лучше использовать второй метод, поскольку вы можете заблокировать экран и отобразить только диалоговое окно, и это произойдет, пока Пользователь отсутствует, тогда как первый метод не может ничего сделать, пока пользователь фактически не попытается выполнить действие на вашей странице.

2 голосов
/ 23 сентября 2016

Вы можете установить в jQuery глобальный обработчик ошибок, который будет вызываться каждый раз, когда jQuery ajax обнаруживает ошибку.Если время сеанса истекло, выдается ошибка 401.Это может быть перехвачено, и пользователь перенаправляется на страницу входа в систему.

$( document ).ajaxError(function( event, jqxhr, settings, thrownError ) {
    if (jqxhr.status == 401) {
        window.location.replace("/login");
    }
});

Глобальный обработчик ошибок всегда должен добавляться в объект документа.

2 голосов
/ 11 октября 2011

Вы можете взглянуть на следующую запись в блоге , которая иллюстрирует приятную технику, позволяющую серверу вернуть код состояния 401 в этом случае, который может быть записан на стороне клиента, и предприняты соответствующие действия ( показывает модал пользователю).

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