关闭浏览器后,再打开浏览器,session失效的原因分析

3 篇文章 0 订阅
1 篇文章 0 订阅

session失效的原因

session的原理

在了解原因之前,需要知道一个很重要的知识点

  • session是基于cookie实现的

  • 当浏览器向服务器发送数据的时候,每次都会携带cookie,
    session会话开始的时候,服务器会从浏览器传过来的cookie中查找JSessionId的值
    并和服务器中存储session对象的map表的key进行比较

  • 如果cookie中没有JSessionId,说明这是第一次会话,
    服务器会创建一个session对象,并保存到Map表的value中,key保存session的唯一性id
    同时,服务器会将session对象的唯一Id保存到cookie的JsessionId对应的值中,并发送给浏览器。

  • 当浏览器再次访问服务器时,会将cookie中的JsessionId发送过来,服务器依据 JsessionId的值找到对应的session对象。

    从而保证了用户的会话状态

在这里插入图片描述

session失效的原因

  • 创建session后,session将会创建一个cookie,名为JSESSIONID,值为当前session的id
  • 注意:此时,cookie中保存JSESSIONID的时间是默认的-1,
    即,关闭浏览器,cookie的JSESSIONID失效
  • 所以,再次打开浏览器时,虽然服务器的session仍然有效,但是,cookie的JSESSIONID失效

session 并不是随着浏览器的关闭而关闭的
session只会随着其生命周期结束或者强制销毁

可以通过下面这种方法解决

        //1.创建cookie对象
		//Cookie是可以覆盖的,如果重复写入同名的Cookie,那么将会覆盖之前的Cookie。
		Cookie cookie=new Cookie("JSESSIONID",session.getId());//覆盖
		//2.持久化存储,设置cookie存活时间[保存在硬盘中的时间]
		cookie.setMaxAge(1*60*60*24);//参数单位是秒,在硬盘保存1天,60*60*24
		//3.发送Cookie对象
		response.addCookie(cookie);
		
  • 但,通常情况下,很少被用到
  • 通常利用cookie实现免密登录,替代这个过程
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值