Как Java EE продлевает время жизни / тайм-аут сеанса - PullRequest
0 голосов
/ 01 октября 2018

У меня сеанс Java EE, время ожидания которого составляет 10 минут, если он не используется.Я знаю, что любой запрос, попавший на сервер, сделает его «не бездействующим», и его сеанс будет обновлен.

У меня такой вопрос, как контейнер Java EE обрабатывает это снизу?

1) это так?из-за этого обнаружить наличие файлов cookie (JSESSIONID) в заголовке HTTP-запроса?

2) или из-за вызова request.getSession() или request.getSession(false) делает трюк под?

Я не могу найти ничего подробного после поиска во многих сообщениях.

Почему я должен это знать, потому что я столкнулся с проблемой.У меня есть приложение, время ожидания которого составляет 10 минут.Но у меня также периодически запускается опрос ajax.Это значит, что моя сессия никогда не истечет / истечет время ожидания.Опрос ajax содержит файлы cookie (JSESSIONID), но я не уверен, является ли это основной причиной, потому что у меня есть фильтр Spring Security, который может вызывать request.getSession для каждого HTTP-запроса.

1 Ответ

0 голосов
/ 02 октября 2018

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

На основании спецификации, которую я нашел в servlet-4-final-spec:

7.6 Время последнего доступа

Метод getLastAccessedTime интерфейса HttpSession позволяет сервлету определять время последнего обращения к сеансу перед текущим запросом.Сеанс считается доступным, когда запрос, являющийся частью сеанса, сначала обрабатывается контейнером сервлета.

Итак, я иду найти реализацию Tomcat :

long getLastAccessedTime ()Возвращает последний раз, когда клиент отправил запрос, связанный с этим сеансом, в виде количества миллисекунд с полуночи 1 января 1970 года по Гринвичу и помечен временем, когда контейнер получил запрос.Действия, выполняемые вашим приложением, такие как получение или установка значения, связанного с сеансом, не влияют на время доступа.

Все еще не очень ясно, оно говорит «значение, связанное с сеансом», ноне говоря getSession.

Тогда я нашел this :

org.apache.catalina.core.StandardHostValve.ACCESS_SESSION

Если это правда, каждый запросто, что связано с сеансом, приведет к тому, что время последнего обращения к сеансу будет обновлено независимо от того, имеет ли запрос явный доступ к сеансу.В противном случае значение по умолчанию будет false .

Так что для Tomcat по умолчанию мы должны явно вызвать request.getSession, чтобы обновить сеанс, если мы не установим этот Tomcatсвойства к истине.

Ссылка:

1) Когда сеанс считается доступным

2) http://tomcat.10.x6.nabble.com/Session-timeouts-ignore-quot-periodic-polling-quot-URL-td2159572.html

...