2012-04-03 2 views
8

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

  1. Использование функции javascript time out, как описано here.
  2. Использование Server Push с использованием WebSockets, которому не требуется курс HTML5.

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

ответ

6

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

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

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

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

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

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

1

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

Таким образом, вы всегда будете установить это значение (сессия-config-> Session-Timeout) * 60.

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

+0

Это даже безопасно. Тайм-аут сеанса на стороне клиента можно легко обойти, введя js-код, например, через подключаемый модуль, который обновляет счетчик каждый (время выхода - 1) –