Сеанс потерян при закрытии браузера - PullRequest
8 голосов
/ 12 сентября 2010

Я устанавливаю время ожидания сеанса.

 <session-config>
<session-timeout>11520</session-timeout>

</session-config>

Каждый раз, когда я закрываю браузер и снова открываю его, вызывая сервлет, я вижу, что новый сеанссоздано.Это видно из метода SessionCreated, выполняемого в HttpSessionListener каждый раз, когда открывается браузер.

Я новичок в tomcat / Java, но если бы я работал в среде ASP.NET, я бы обошел его установкой cookieс тем же именем, что и имя сеанса.

Как лучше всего обойти это в Tomcat?

спасибо заранее.

Дэнни.

Ответы [ 2 ]

12 голосов
/ 02 июня 2013

Я обнаружил, в похожем вопросе , что это теперь поддерживается в Servlet 3.0:

<session-config>
  <session-timeout>11520</session-timeout>
  <cookie-config>
    <max-age>11520</max-age>
  </cookie-config>
</session-config>

(Немного поздно, но я надеюсь, что это может быть кому-то полезноеще тоже)

9 голосов
/ 12 сентября 2010

Каждый раз, когда я закрываю браузер и снова открываю его, вызывая сервлет, я вижу, что создается новый сеанс.

Это соответствует указанному поведению. Сеансовый файл cookie не имеет возраста, поэтому он действует до тех пор, пока на клиенте открыт экземпляр веб-браузера или пока клиент не посещает веб-сайт в течение длительного времени, как указано в параметре session-timeout на стороне сервера.

В основном вам нужен файл cookie, который живет дольше, чем файл cookie сеанса. Вы можете создать новый долгоживущий файл cookie с помощью API Cookie, установить его возраст с помощью Cookie#setMaxAge(), добавить его в ответ HTTP с помощью HttpServletResponse#addCookie(). По последующим HTTP-запросам вы можете определить наличие куки, используя HttpServletRequest#getCookies().

Это, кстати, не относится к Tomcat. Вы можете сделать то же самое с любым другим сервлет-контейнером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...