异常记录---关闭浏览器后session失效

解决关闭浏览器后session失效,解决方法在最后.

在使用到session时,有讲到一个session的过期时间,默认是30min,这个值可以在tomcat > conf > web.xml中查看修改

异常记录---关闭浏览器后session失效_第1张图片

可以看到配置文件中默认是30min,按理说session存放在服务器端,超时时间是30min,关闭浏览器再打开应该可以再次获取到的,然而实际情况是关闭浏览器后再获取session中存储的数据取不到了.

查了一下资料,这里就涉及到session的原理了,session依赖于cookie,浏览器通过创建一个"JSESSIONID"的cookie,将session的id通过cookie的方式发送给浏览器.下次请求时服务器就根据这个id找到session并从中读取数据.可以随便抓一个包看一眼:

异常记录---关闭浏览器后session失效_第2张图片

那么问题就来了,cookie的过期时间又是多久呢?还是看文档.

Java EE的文档,索引搜索Cookie,其中有一个getMaxAge()方法:

异常记录---关闭浏览器后session失效_第3张图片

看文档说明,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);
        }
    }
}

问题解决!

你可能感兴趣的:(Session,Java,Cookie,异常记录)