Время ожидания сеанса на стороне клиента - PullRequest
9 голосов
/ 03 апреля 2012

Сценарий состоит в том, что пользователь должен получить уведомление (скажем, через обычное оповещение JS или перенаправление и т. Д.), Когда его сеанс скоро истечет. Это можно сделать несколькими способами:

  1. Использование функции тайм-аута JavaScript, как объяснено здесь .
  2. Использование Server Push с использованием WebSockets , что, разумеется, потребует поддержки HTML5.

Каковы относительные достоинства / недостатки этих двух подходов? Кроме них, , существуют ли другие способы достижения этой цели (некоторая стандартная библиотека и т. Д.). Мой бэкэнд - Java EE (Struts + Spring).

Ответы [ 2 ]

8 голосов
/ 06 апреля 2012

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

Если при использовании принудительной отправки сервера с помощью веб-сокетов выможет быть не в состоянии ориентироваться на пользователей с не очень последними браузерами.Возможно, вам придется использовать некоторые сигнальные структуры и даже изменить свой стек бэкэнда.(Я могу думать о socket.io & SignalR на данный момент)

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

ОБНОВЛЕНИЕ: Вот еще один подход, о котором я мог подумать.

Каждый раз, когда страница обслуживается, я отправляю Cookie, который может бытьдоступ на стороне клиента, который будет содержать время UTC, в течение которого сеанс будет превышен.В моем коде я бы поместил setInterval, который будет считывать значение и сравнивать местное время с UTC, а если он закроется, отобразить всплывающее окно, сообщающее, что время ожидания наступит через X секунд и т. Д.

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

2 голосов
/ 28 июня 2016

А как насчет создания фильтра, в котором вы устанавливаете cookie с количеством секунд, оставшихся до истечения времени ожидания?

Итак, вы всегда будете устанавливать это значение (session-config-> session-timeout) * 60.

На лицевой стороне, используя setInterval, вы обновите это значение cookie, вычтя интервал из текущего значения cookie, чтобы вы не зависели от конфигурации времени.

...