Веб-приложение на Java / GWT: как получить обратный вызов по тайм-ауту сеанса - PullRequest
2 голосов
/ 19 октября 2010

У нас есть приложение GWT, которое развернуто на Tomcat.На сервере мы установили тайм-аут на 1 минуту

httpSession.setMaxInactiveInterval(1*60) 

На стороне клиента мы также установили несколько файлов cookie со значением тайм-аута на 1 минуту.Через 1 минуту мы замечаем, что клиентские куки удаляются;Однако JSESSIONID, установленный контейнером сервлета (jetty / tomcat), все еще присутствует в клиенте.

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

На данный момент, если пользователь обращается к серверу с истекшим сроком действиясеанс, мы говорим ему, что сеанс истек;Однако Заказчик хочет, чтобы мы предотвратили «потерянные изменения», предупредив пользователя о том, что время сеанса истекло (не тратя время на редактирование любых данных на стороне клиента, а затем подтвердив, что время сеанса истекло - потерянные изменения!)

Какие еще способы справиться с ситуацией?

Спасибо,

Ответы [ 3 ]

3 голосов
/ 19 октября 2010

Мы сделали это в нашем GWT-приложении, в котором пользователи получают предупреждение до истечения сеанса

  • У нас есть каждый клиентский запрос для прохождения LoggingAsyncHandler (мы расширяем каждый асинхронный вызов этим)
  • В LoggingAysyncHandler мы устанавливаем таймер (класс Timer от GWT), который немного меньше времени ожидания сеанса, поэтому, если до этого времени нет активности, мы выскакиваем сообщение для клиента: «Вы хотите продолжить», если онинажмите ok, чтобы сбросить таймер и сделать фиктивный вызов на сервер, который также сбрасывает время сеанса.

Надеюсь, это поможет!

1 голос
/ 19 октября 2010

Для отправки данных с сервера вы можете использовать HTML5 Web Sockets или для более старых браузеров, некоторую форму Comet .

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

0 голосов
/ 19 октября 2010

Если в вашем приложении есть файл web.xml, добавьте его в часть веб-приложения

<session-config>
     <session-timeout>30</session-timeout>
</session-config>

Это время ожидания сеанса на стороне сервера в минутах

* Редактировать - начиная с идеиэто, кажется, потеряно с некоторыми читателями.Если пользователь пытается подключиться к серверу с просроченным сеансом, он может быть перенаправлен на страницу входа в систему, как и просил оригинальный автор.Нет никаких причин, по которым передний конец должен отправлять обратный вызов на сервер, когда истекает срок действия cookie.Если пользователь не отправляет sessionID, он переходит к экрану входа в систему.Если они отправляют идентификатор сеанса на сервер, срок действия которого истек, отправьте их на страницу входа.Всплывающее сообщение может быть обработано во внешнем интерфейсе

...