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





Лучшим советом, вероятно, будет попросить пользователей закрыть окно браузера, как только они это сделают. При использовании файлов cookie сеанса сеанс автоматически завершается при закрытии браузера или иным образом по истечении 30-минутного тайм-аута (может быть изменен на сайте).
Поскольку по умолчанию между браузером и сервером не происходит взаимодействия после загрузки страницы, вам нужно, чтобы javascript связывался с сервером в фоновом режиме на страницах форм, чтобы обновить сеанс, но это кажется слишком большим количеством проблем для такая мелкая проблема.
Используйте AJAX, чтобы регулярно хранить содержимое частично заполненной формы, чтобы они не потеряли свою работу, если их загрузит система. Черт возьми, как только вы это сделаете, используйте AJAX, чтобы их сеанс не истек, если они тратят время на набор текста.
Возможно, в этом случае может быть полезен процесс сохранения активности javascript. Если сценарий захватывает несколько ключевых триггеров, он отправляет на сервер сообщение «Я все еще печатаю», чтобы поддерживать сеанс в рабочем состоянии.
Держите сервер в курсе того, что пользователь активно вводит информацию. Например, отправьте сообщение на сервер, если пользователь нажимает клавишу TAB или щелкает мышью по полю. Окончательное решение зависит от вас.
Если время ожидания сеанса настолько короткое, что у пользователя нет времени для заполнения формы, я бы поставил сценарий AJAX, который отправляет HTTP-запрос на сервер каждые несколько минут, чтобы поддерживать сеанс в рабочем состоянии. Я бы сделал это только на страницах, которые пользователь должен что-то заполнить или уже начал что-то заполнять.
Другое решение - использовать сценарий напоминания о тайм-ауте сеанса, который открывает диалоговое окно, чтобы напомнить пользователю, что сеанс скоро истечет. Всплывающее окно должно отображать «Выход» и «Продолжить использование приложения», которое делает запрос ajax для обновления тайм-аута сеанса.
Вы думали о том, чтобы разбить форму на более мелкие части?
Это может немного раздражать пользователя, но разделение проверок на стороне сервера может быть менее раздражающим для пользователя, когда он что-то напортачивает.
В качестве альтернативы техническим решениям вы можете составить свое приложение таким образом, чтобы каждый раз, когда выполняется определенная работа, например при заполнении формы, вы спрашивали пользователя, хочет ли он продолжить выполнение другой работы или уже сделал. У вас может быть начальный экран с параметрами меню, и если пользователь выбирает вариант, он сначала должен ввести свои учетные данные.
Или введите в форму поле с паролем. Зависит от того, сколько форм они должны заполнить за сеанс.
Когда пользователь публикует форму и время его сеанса истекло, вы должны убедиться, что где-то сохранили значения формы, а затем попросить пользователя снова войти в систему. После повторной аутентификации вас они могут повторно отправить форму (поскольку ни одна из их данных не будет потеряна).
Следите за тайм-аутом и опубликуйте всплывающее окно, чтобы уведомить пользователя об истечении срока его текущего сеанса и представить кнопки «ОК» или «Отмена». ОК, чтобы продолжить сеанс (т.е. сбросить счетчик еще на 5 или 10 минут - в зависимости от того, что вам нужно) -или- Отменить, чтобы позволить сеансу продолжить обратный отсчет до нуля и, таким образом, завершить. Это один из множества способов справиться с этим.
Я разработал что-то, требующее очень долгого сеанса. Пользователь вошел на страницу, когда он сидел на машине, и, выполнив свою работу, вышел из системы. Теперь он может использовать систему в течение нескольких минут или часов. Чтобы сохранить сеанс до тех пор, пока он не вышел из системы, я использовал таймер с javascript, он отправился на сервер и обновил метку гимн с текущим временем на сервере.
Использование «потока» JavaScript для сохранения сеанса открытым - для меня плохая идея.
Это противоречит идее тайм-аута сеанса, которая существует для освобождения некоторых ресурсов, если перед приложением нет пользователя.
Я думаю, вам следует настроить тайм-аут сеанса с более точным временем, чтобы заполнить форму в «типичном нормальном использовании».
Вы также можете проявить инициативу:
Он думает, что это лучший вариант, потому что он не позволяет пользователю заполнять сложную форму даром и обрабатывать случай, когда пользователь ушел.
Думаю, в моем случае это лучше всего сработает. Это менее навязчиво, чем всплывающее диалоговое окно и отображение сообщения, которое пользователь, вероятно, не поймет. И он не будет поддерживать сеанс в течение неопределенного времени, постоянно опрашивая сервер.