Обработка истечения сессии в MVC 2 с помощью ajax - PullRequest
2 голосов
/ 04 января 2012

Я хочу проверить, истек ли сеанс или нет.Поэтому я решил создать действие с именем IsServerExpired и вернуть ему объект json, содержащий логическое значение и URL-адрес перенаправления.

Так что функция сценария java выполнит запрос ajax для этого действия с указанным интервалом времени..У меня есть несколько основных вопросов ..

1.Если я отправлю запрос ajax, я думаю, что это обновит время сеанса.Таким образом, сессия не истечет, если я использую этот метод.я прав?

Если он обновляется, как я могу проверить, истекает ли сеанс с помощью опроса

Ответы [ 2 ]

3 голосов
/ 04 января 2012

Существует более простой подход для выхода пользователя из системы после истечения сеанса.

Вы можете сохранить SessionTimeout где-нибудь на стороне клиента и запустить таймер на стороне клиента, как только таймер достигнет конца, перенаправить пользователя на выход из URL.

Вот пример.Model здесь содержит SessionTimeout значение.

$(document).ready(function () {
  var timeOutInMinutes = @Model;
  if(timeOutInMinutes > 0)
  {
    setTimeout(function() {
      window.location = 
              '@Url.Action("Logout", "Authentication", new {area=""})';   
    },timeOutInMinutes * 1000 * 60);
  }
});

Более удобный способ - показать всплывающее окно, которое сообщит, что сессия истечет через одну минуту (если тайм-аут сеанса 15 минут, а затем показать его через 14 минут), так что пользователь сможет обновить страницу.и продолжить работу.

1 голос
/ 04 января 2012

Я думаю, что вы путаете между сеансом ASP.NET и файлом cookie аутентификации. Я подозреваю, что вы говорите об истечении срока действия файла cookie аутентификации. Если вы установили для slidingExpiration значение true в своем файле web.config, то опрос AJAX-запросов продлит время ожидания, поэтому они не будут подходящими. Фил Хаак описал очень элегантный способ определения истечения срока действия файла cookie аутентификации в вызовах AJAX в этом сообщении в блоге .

...