Лучший способ справиться с таймаутом сессии в веб-приложениях? - PullRequest
11 голосов
/ 22 сентября 2008

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

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

Как бы вы справились с этим в удобной для пользователя форме?

Ответы [ 11 ]

3 голосов
/ 22 сентября 2008

Держите сервер в курсе того, что пользователь активно вводит информацию. Например, отправьте сообщение на сервер, если пользователь нажимает клавишу TAB или щелкает мышью по полю. Окончательное решение за вами.

3 голосов
/ 22 сентября 2008

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

2 голосов
/ 22 сентября 2008

Если тайм-аут сеанса настолько мал, что у пользователя нет времени на заполнение формы, я бы поместил AJAX-скрипт, который каждые несколько минут отправляет http-запрос на сервер, чтобы поддерживать сеанс. Я делал бы это только на страницах, которые пользователь должен заполнить или уже начал заполнять.

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

2 голосов
/ 22 сентября 2008

Лучший совет, вероятно, состоит в том, чтобы попросить пользователей закрыть окно браузера, как только они закончили. При использовании cookie-файлов сеанса сеанс автоматически завершается, когда браузер закрывается или иным образом через 30-минутный тайм-аут (может быть изменен afaik).

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

1 голос
/ 22 сентября 2008

Использование JavaScript-потока для поддержания открытого сеанса для меня плохая идея.

Это противоречит идее времени ожидания сеанса, которое существует для освобождения некоторых ресурсов, если перед приложением нет пользователя.

Я думаю, что вы должны скорректировать время ожидания сеанса с более точным временем, чтобы заполнить форму в «обычном обычном режиме».

Вы также можете быть активным:

  1. с предупреждением JavaScript, отображающим ненавязчивое предупреждение (не всплывающее окно) пользователю до истечения времени ожидания, которое говорит, что сессия скоро истечет (и дает ссылку для отправки ajax-запроса для сброса времени ожидания и удаления это предупреждение - это позволит пользователю потерять форму, которую он в данный момент печатает),
  2. , а также имеет второй JavaScript-поток, который, если сеанс истек, перенаправляет на страницу входа с сообщением о том, что сеанс истек.

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

1 голос
/ 22 сентября 2008

Контролируйте время ожидания и публикуйте всплывающее окно, чтобы уведомить пользователя о том, что его текущий сеанс истекает, и представить кнопки «ОК» или «Отмена». ОК, чтобы продолжить сеанс (т. Е. Сбросить счетчик на 5 минут или 10 минут - все, что вам нужно) - или - отменить, чтобы сеанс продолжал обратный отсчет до нуля и, таким образом, заканчивался.
Это один из множества способов справиться с этим.

1 голос
/ 22 сентября 2008

Вы рассматривали возможность разбить форму на более мелкие куски?

1 голос
/ 22 сентября 2008

Может быть, в этом случае будет полезен процесс поддержки javascript. Если скрипт захватывает некоторые ключевые триггеры, он отправляет на сервер сообщение «Я все еще печатаю», чтобы поддержать сеанс.

0 голосов
/ 22 сентября 2008

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

0 голосов
/ 22 сентября 2008

Когда пользователь отправляет форму и время его сеанса истекло, вы должны убедиться, что вы сохранили значения формы где-нибудь, а затем попросить пользователя снова войти в систему. После повторной аутентификации они могут повторно отправить форму (поскольку ни одна из их данных не будет потеряна).

...