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

StackOverflow https://stackoverflow.com/questions/114321

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Вы также можете проявить инициативу:

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

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

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

Или поместите поле пароля в форму.Зависит от того, сколько форм им придется заполнить за сеанс.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top