解决关闭浏览器后session失效,解决方法在最后.
在使用到session时,有讲到一个session的过期时间,默认是30min,这个值可以在tomcat > conf > web.xml中查看修改
可以看到配置文件中默认是30min,按理说session存放在服务器端,超时时间是30min,关闭浏览器再打开应该可以再次获取到的,然而实际情况是关闭浏览器后再获取session中存储的数据取不到了.
查了一下资料,这里就涉及到session的原理了,session依赖于cookie,浏览器通过创建一个"JSESSIONID"的cookie,将session的id通过cookie的方式发送给浏览器.下次请求时服务器就根据这个id找到session并从中读取数据.可以随便抓一个包看一眼:
那么问题就来了,cookie的过期时间又是多久呢?还是看文档.
Java EE的文档,索引搜索Cookie,其中有一个getMaxAge()方法:
看文档说明,Cookie的最大生存时间,默认为-1,代表该cookie保留到浏览器关闭为止.
解决方法:
既然session依赖于一个"JSESSIONID"的cookie,那我们只需获取到这个cookie并为它设置超时时间即可:
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if("JSESSIONID".equals(cookie.getName())){
cookie.setMaxAge(60*60*24*7); //自行设置超时时间,单位是秒
response.addCookie(cookie);
}
}
}
问题解决!