2013-02-09 5 views
1

Как это сделать в Asp.Net MVC?Как обрабатывать сеанс в asp.net mvc

  • Таймер активности: когда пользователь переходит на страницу (означает что-то, что вызывает ActionResult), таймер сбрасывается.
  • Когда пользователь не совершает никаких действий более чем за 15 минут, ему будет предложено задать вопрос: «Вы все еще там?» (Да/LogOut), если он нажмет «да», тогда таймер активности вернется к нулю и снова начнет отсчет.
  • Этот таймер активности должен быть уникальным для каждого пользователя и должен быть уничтожен при выходе из системы.

ПОЖАЛУЙСТА, ПОЖАЛУЙСТА! Будьте БОЛЬНЫМ МЕНЯ! Я не знаю, как это сделать.

Я опубликовал это question, но я не получил ответа, который решает эту проблему. Поэтому я планирую сделать это с самого начала, и мне нужна помощь/руководство, чтобы сделать это правильно.
Любые справочные ссылки или руководства будут высоко оценены!

+0

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

+0

отличный вопрос! –

ответ

1

Я бы справился с этим на клиенте. Создайте объект для инкапсуляции функций.

Что-то вроде:

var UserInactivityMonitor = UserInactivityMonitor || {}; 
UserInactivityMonitor = (function (module) { 
    var inactivityIndex; 
    var promptIndex; 
    var timer; 

    module.startInactivityMonitor = function() { 
     module.timerTick(); 
    }; 

    module.timerTick = function() { 
     inactivityIndex--; 
     if (inactivityIndex === 0) { 
      module.fireInactivityAlert(); 
     } 

     if (inactivityIndex === promptIndex) { 
      module.fireIdlePrompt(); 
     } 

     timer = setTimeout(module.timerTick, 1000); 
    }; 

    module.fireIdlePrompt = function() { 
     var response = confirm('are you stil there?'); 
     if (response === true) { 
      module.resetInactivityIndex(); 
     } 
    }; 

    module.resetInactivityIndex = function() { 
     inactivityIndex = 15; 
     promptIndex = 5; 
    }; 

    module.fireInactivityAlert = function() { 
     alert('Inactivity alert!'); 
    }; 

    module.initialize = function() { 
     module.resetInactivityIndex(); 
     module.startInactivityMonitor(); 
    }; 

    return module; 
})(UserInactivityMonitor || {}); 

Набор inactivityIndex на количество секунд, которое пройдет перед срабатыванием пассивность событий. Установите promptIndex на количество оставшихся секунд, когда пользователь будет запрошен, если они все еще там. Приведенный выше код устанавливает тайм-аут бездействия до 15 секунд, и приглашение простоя будет вызываться с оставшейся отметкой 5 секунд.

На странице загрузки запустить таймер неактивности:

$(function() { 
    UserInactivityMonitor.initialize(); 
}); 

На любой запрос AJAX, сброс счетчика:

$("#fooButton").on('click', function() { 
     $.ajax(
      { 
       url: $("#buttonClickPostUrl").val(), 
       data: { 
        someData: 'data' 
       }, 
       type: 'POST', 
       complete: function() { 
        UserInactivityMonitor.resetInactivityIndex(); 
       } 
      }); 
    }); 

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

+0

Вы имеете в виду, что я должен сделать это '$ (document) .click (function() {// Call UserInactivityMonitor});' улавливать все события кликов на странице и рассматривать их как активность, а затем сбросить таймер? – fiberOptics

+0

Не совсем. Вы имеете в виду образец кода запроса ajax или образец загрузки страницы? Всякий раз, когда происходит полная загрузка страницы (IE, в первый раз, когда пользователь запрашивает страницу), вы хотите запустить таймер бездействия. Пример загрузки страницы показывает, как это сделать, используя jQuery. Пример кода ajax показывает, как сбросить счетчик неактивности при завершении запроса ajax (сбой или нет), снова образец показывает запрос ajax с использованием jquery. Вам придется форматировать этот образец в существующую базу кода. Выводом из образца ajax является вызов функции resetInactivityIndex(). – Neiliux

Смежные вопросы