Tomcat. Жизнь сессии
Какими механизмами сервер Tomcat закрывает сессию по таймауту? С какого момента включается счётчик, отправка реквеста клиентом или получение респонса? Тое интересует, может ли сессия закрыться по таймауту пока клиент ждет ответ на get запрос, который сервер обрабатывает продолжительное время.
Ответы (2 шт):
Да, может. Длительность сессии регулируется через
$CATALINA_BASE/conf/web.xml:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
Сессия определяется как:
Session timeout represents the event occuring when a user does not perform any action on a web site during an interval (defined by a web server).
Чтобы сессия не убивалась во время выполнения длинного запроса необходимо выставить значение StandardSession.ACTIVITY_CHECK на true, это предотвращает закрытие активной сессии, которая еще обрабатывается сервером.
Спецификация сервлетов дает такие ответы.
Вопрос:
С какого момента включается счётчик, отправка реквеста клиентом или получение респонса?
Ответ: с момента начала обработки запроса.
The session is considered to be accessed when a request that is part of the session is first handled by the servlet container.
Вопрос:
может ли сессия закрыться по таймауту пока клиент ждет ответ на get запрос, который сервер обрабатывает продолжительное время
Ответ: не может. Но будет закрыта после того, как запрос выполнится, если не придет новый запрос в той же сессии.
The session invalidation will not take effect until all servlets using that session have exited the service method
Но у томката есть тонкие настройки, которые регулируют как это работает и запущен ли tomcat в режиме строгой совместимости со спецификацей.
По умолчанию томкат запущен в режиме, когда сессия умирает независимо от сущенстующих запросов и время неактивности считается от предыдущего конца запроса.