2010-09-11 168 views
7

我设置了会话超时。关闭浏览器会话丢失

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

</session-config>

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

我是tomcat/Java中的新成员,但是如果我在ASP.NET环境中工作,那么我会解决它的问题,即将Cookie设置为与会话名称相同的名称。

在Tomcat中解决它的最佳做法是什么?

谢谢你提前。

Danny。

回答

9

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

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

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

这是非Tomcat的具体方式。您可以在其他servletcontainer上执行相同的操作。

+0

感谢您反应快。我可以在web.xml中或者在HttpSesisonListener sesison创建的方法中设置最大cookie时间吗? – 2010-09-12 11:05:47

+0

在'Filter'中做。你有'HttpServletReponse'到你的手中。你可以通过'HttpSession#isNew()'来检查会话是否是新的。 – BalusC 2010-09-12 13:09:51

9

我发现,in a similar question,这是现在的Servlet 3.0支持:

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

(有点晚,但我希望这可以成为有用的人别人太)

+1

正是我在找的!这是最好的答案。 – Dmitry 2014-12-03 07:32:01

+0

谢谢你,你救了我:) – Oneiros 2015-11-06 15:19:29

+0

谢谢你的好建议 – 2017-05-30 05:13:37