JSESSIONID Cookie с датой истечения срока действия в Tomcat

Как лучше всего установить дату истечения срока действия файла cookie JSESSIONID, отправляемого Tomcat для сеанса сервлета?

По умолчанию срок действия файла cookie кажется «сеансом», что означает, что сеанс исчезает в клиенте, как только браузер перезапускается. Но я хотел бы, чтобы он оставался открытым в течение 12 часов, даже после перезапуска браузера (и затем соответствующим образом настроил бы тайм-аут сеанса на сервере).

Есть ли способ установить дату истечения срока действия в Tomcat, например с использованием какой-либо опции конфигурации или модуля расширения? Или есть надежный способ установить дату истечения срока действия JSESSIONID с помощью фильтра сервлета?


person Tim Jansen    schedule 08.02.2011    source источник


Ответы (2)


Начиная с Servlet 3.0, это можно просто указать в файле web.xml:

<session-config>
    <session-timeout>720</session-timeout> <!-- 720 minutes = 12 hours -->
    <cookie-config>
        <max-age>43200</max-age> <!-- 43200 seconds = 12 hours -->
    </cookie-config>
</session-config>

Обратите внимание, что session-timeout измеряется в минутах, а max-age - в секундах.

person Sander    schedule 27.03.2012
comment
Это не помогает, поскольку Tomcat не отправляет повторно идентификатор jsession-id при каждом запросе. Таким образом, даже если пользователь отправляет последующие запросы, сеанс tomcat расширяется, а максимальный возраст cookie - нет, в результате чего пользователь теряет сеанс, несмотря на то, что он активен. - person Yamcha; 27.12.2017
comment
@Yamcha Я думаю, что вы правы, однако, возможно, наличие достаточно большого срока действия приведет только к тому, что пользователю потребуется повторно входить в систему через каждые 12 часов, даже если он был активен в то время. Это не так уж и плохо. - person peterh; 13.06.2019

Я не думаю, что можно делать то, что вы хотите, без изменения кода Tomcat.

Однако обратите внимание, что это может иметь неприятный побочный эффект: если пользователь запускает сеанс и остается активным в течение двенадцати часов, его тайм-аут сеанса будет соответственно обновлен (тайм-аут будет обновляться при каждом запросе), но его cookie не будет, и таким образом, пользователь потеряет сеанс через 12 часов, даже если он был активен все это время.

person JB Nizet    schedule 08.02.2011
comment
Ответ Сандера показывает, что это действительно возможно, и быстрый Google показывает, что Servlet 3.0 был выпущен в 2009 году, что говорит мне о том, что этот ответ был неправильным на момент публикации. Таким образом, -1! - person Mark Amery; 12.12.2018