一尘不染

关闭浏览器时会话丢失

tomcat

我设置了会话超时。

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

</session-config>

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

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

在Tomcat中解决该问题的最佳实践是什么?

先感谢您。

丹妮


阅读 263

收藏
2020-06-16

共1个答案

一尘不染

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

这符合指定的行为。会话cookie没有使用期限,因此只要客户端打开了Web浏览器实例,或者直到客户端没有访问session- timeout服务器端的时间(如服务器端设置中指定的那样),它就可以存在。

您基本上需要一个寿命比会话cookie长的cookie。您可以使用CookieAPI
创建一个新的长寿Cookie,使用设置其使用期限,然后使用将其Cookie#setMaxAge()添加到HTTP响应中HttpServletResponse#addCookie()。在后续的HTTP请求中,您可以使用确定Cookie的存在HttpServletRequest#getCookies()

顺便说一下,这不是特定于Tomcat的。您可以在其他所有servlet容器上执行相同的操作。

2020-06-16