Ищете способ предложить пользователю оставаться в системе до истечения автоматического тайм-аута и автосохранять непосредственно перед выходом из системы?

#jquery #asp.net-mvc-2 #forms-authentication

#jquery #asp.net-mvc-2 #формы-аутентификация

Вопрос:

Я использую проверку подлинности в формах, и у меня тайм-аут составляет 30 минут.

Что я ищу, так это какой-нибудь способ сообщить пользователю через несколько минут, что время ожидания истекает, и хотят ли они сохранить свою сессию живой.

У нас есть несколько довольно больших форм, в которые пользователи заполняют большое количество данных. Они, вероятно, проверяли информацию в других системах, перепроверяли с коллегами по телефону и т.д.

Я также хочу добавить автосохранение непосредственно перед истечением времени ожидания.

Легко ли этого добиться, например, с помощью jQuery?

Комментарии:

1. Ищите HttpSessionListener download.oracle.com/javaee/1.4/api/javax/servlet/http/… эквивалент в .net, также требует некоторой дополнительной логики

Ответ №1:

Решение, которое мы нашли в нашем проекте, заключалось в создании javascript (не обязательно jQuery), который запрашивает пользователя перед выходом из системы и отправляет фиктивный HttpRequest, чтобы поддерживать сеанс в рабочем состоянии.
наш скрипт был чем-то вроде (непроверенный):

 var promptUserTimeoutId = 0;
promptUserTimeoutId = setTimeout(promptUser, 30 * 60 * 1000); //call just once, in 30 minutes

function promptUser() {
  if (alert('stay logged in?')) {
       sendHttpRequest(); //just signal a keep-alive to the server...
       //re-set the 30 minutes count
       clearTimeout(promptUserTimeoutId);
       promptUserTimeoutId = setTimeout(promptUser, 30 * 60 * 1000);
  }
}
  

Ответ №2:

     function keepSessionAlive(timeLeft)
    {
     var timer = setTimeout(function(){
     //Prompt the user to keep the session alive;
     //make a dummy request via ajax to refresh the session on the server.
     //reset the timeLeft to your timeout
     //call keepSessionAlive(timeLeft)
     },timeLeft);
    }
  

Затем при загрузке документа вы можете вызвать свой метод.

 body.onload=keepSesionAlive(<yourTimeOut-3 to 4 minutes>);
  

Хотя я не знаю способа jquery сделать это.