2010-08-26 1 views
2

У меня возникли проблемы с тайм-аутами сеанса в моем веб-приложении, поданном Tomcat. Начиная с чтения документации Tomcat, сеансы заканчиваются через время, которое можно настроить в файле web.xml.Как сохранить HttpSessions в Tomcat?

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

Quesion) Означает ли это 30 минут, когда сеанс был создан для пользователя? Или 30 минут с момента последнего обращения к сеансу?

Если это так, как я думал, 30 минут с момента последнего обращения к сеансу, похоже, я не вижу такого поведения. Мои сеансы кажутся потерянными, поскольку я использую сайт. Существуют ли другие способы настройки поведения сеанса помимо этого параметра? Есть что-то, что мне не хватает?

Apache Tomcat/6.0.20

+0

Связанный: [Java-экземпляр Java и переменные сеанса] (http://stackoverflow.com/questions/3106452/java-servlet-instantiation-and-session-variables). – BalusC

ответ

8

Сеанс запускается в веб-браузере, когда он подключается к приложению. Tomcat закрывает сеанс на сервере, когда максимальный период бездействия прошел (30 минут).

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

Вы можете установить его в файле web.xml, как описано.

Вы также можете установить его для session объекта путем вызова setMaxInactiveInterval(int interval) Этот параметр определяет время в секундах, между запросами клиента перед контейнером сервлетов аннулирует эту сессию.

Вы должны убедиться, что печенья является включен для вашего браузера. В противном случае вы создаете новый сеанс с каждым запросом. Вы должны позвонить HttpServletResponse.encodeURL(String url) для каждого URL вашего приложения. Из статьи api doc:

«Кодирует указанный URL, введя в него идентификатор сеанса или, если кодировка не требуется, возвращает URL без изменений. Реализация этого метода включает в себя логику для определения того, является ли идентификатор сеанса должно быть закодированы в URL. Например, если браузер поддерживает куки, или отслеживание сеансов выключено, кодирование URL-адрес не является необходимым.

для надежного отслеживания сеанса, все URL-адрес, испускаемые сервлета должны проходить через этот метод. В противном случае переписывание URL-адресов не может использоваться с браузерами, которые не поддерживают файлы cookie ».