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

解决关闭浏览器后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);
        }
    }
}

问题解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值