关闭浏览器时会话丢失

dan*_*nik 8 java cookies session tomcat servlets

我设置了会话时间.

 <session-config>
<session-timeout>11520</session-timeout>
Run Code Online (Sandbox Code Playgroud)

</session-config>

每次当我关闭浏览器并通过调用servlet再次打开它时,我看到创建了新会话.每次重新打开浏览器时,都可以从HttpSessionListener中执行的SessionCreated方法中看到.

我是tomcat/Java的新手,但如果我在ASP.NET环境中工作,我会解决它设置与会话名称相同的cookie.

在Tomcat中解决它的最佳实践是什么?

先感谢您.

丹尼.

tyr*_*ion 12

在类似的问题中,我发现Servlet 3.0现在支持这个:

<session-config>
  <session-timeout>11520</session-timeout>
  <cookie-config>
    <max-age>11520</max-age>
  </cookie-config>
</session-config>
Run Code Online (Sandbox Code Playgroud)

(有点晚了,但我希望这对其他人也有用)


Bal*_*usC 9

每次当我关闭浏览器并通过调用servlet再次打开它时,我看到创建了新会话.

这符合指定的行为.会话cookie没有年龄,因此只要客户端打开了webbrowser实例,或者客户端没有session-timeout按照服务器端的设置中的指定长时间访问网站,它就会存在.

你基本上想要一个比会话cookie更长寿的cookie.您可以使用CookieAPI 创建一个新的长寿命cookie,使用它设置其年龄,使用Cookie#setMaxAge()它将其添加到HTTP响应中HttpServletResponse#addCookie().在随后的HTTP请求中,您可以使用确定cookie的存在HttpServletRequest#getCookies().

顺便说一句,这不是Tomcat具体的.您可以在每个其他servlet容器上执行相同的操作.