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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
11
0
7 630
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

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

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

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

Ответ принят как подходящий

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

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

anon 22.09.2008 17:43

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

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

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

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

CrashCodes 01.10.2008 23:12

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

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

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

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

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

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

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

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

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

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

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

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