Я использую CookieAuthenticationOptions.ExpireTimeSpan, чтобы установить интервал времени для сеанса пользователя. И это работает хорошо - может быть, слишком хорошо. Когда пользователь работает, заполняя текстовые поля и т. Д., Сервер не выполняет никаких действий, что приводит к тому, что когда пользователь нажимает кнопку Сохранить, он выходит из системы - и теряет все введенные данные.

Есть ли способ, где я могу обновить отметку времени, чтобы предотвратить истечение времени, когда пользователь работает без обратной передачи?

У меня есть несколько идей:

  • Опрос / пинг JavaScript - это может испортить момент выхода пользователя из системы, когда он / она покидает клиентский компьютер через некоторое время.
  • Сделайте некоторый javascript, чтобы перехватить событие нажатия клавиши и отправить ping на сервер, но это может быть сложно реализовать, так как я использую много форм.
  • Перенаправить пользователя на последнюю использованную веб-форму при повторной публикации данных - если это возможно.

Я использую AngularJS 1.4.7 в качестве основы JavaScript.

3
JorgenV 9 Янв 2017 в 13:34

4 ответа

Лучший ответ

Почему бы не использовать директиву препроцессора для установки альтернативного времени истечения, если решение находится в режиме отладки?

var options = new CookieAuthenticationOptions {
#if DEBUG
    ExpireTimeSpan = System.Timespan.FromDays(1)
#else
    ExpireTimespan = System.Timespan.FromMinutes(20) //or your preferred timespan
#endif
}
1
Simmetric 9 Янв 2017 в 10:40

Я думаю, что вы хотите отловить тайм-аут ExpireTimespan и обновить или продлить Expiretime. эта ссылка может помочь вам. Обрабатывать время ожидания и управлять ими ..

http://markfreedman.com/handling-session-and-authentication-timeouts-in-asp-net-mvc/

0
hsyn.ozkara 9 Янв 2017 в 11:06

Предполагая, что вы используете ng-модель в форме, вы можете наблюдать за изменениями модели и пинговать сервер, когда она меняется.

$scope.$watch('formModel',function(){
   //ping the server
},true);

Чтобы избежать пинга при каждом нажатии клавиш или других изменениях, вы можете использовать таймер.

var okToPing = true;    
$scope.$watch('formModel',function(){
       if(okToPing){
          okToPing = false;
          //ping the server
          setTimeout(function(){okToPing=true},10000);
    },true);

Я собрал здесь кодовую ручку, чтобы показать, как она может работать: http://codepen.io/daveycakes / ручка / mRewbJ

1
daveyfaherty 18 Янв 2017 в 09:23

Используйте javascript для проверки связи с сервером только тогда, когда пользователь находится в режиме «заполнения формы». Например, вы можете запустить пинг, когда пользователь начинает редактирование, и остановить его, когда они сохраняют данные. Пользователи, вероятно, не оставят ПК без присмотра при заполнении данных в форме - и если они это сделают, это их вина.

0
edc65 9 Янв 2017 в 10:44