session和cookie实现原理

场景1:第一次访问
客户端请求到达tomcat,服务器会读取请求中的cookie,查看其中键名叫做JSESSIONID
的cookie,第一次访问之前从来没有保存过此cookie所以无法找到,找不到服务器就判断
这是一个新的会话的开始。则在服务器的内存中开辟一个空间,为此客户端提供保存数据
的功能,这个空间就是session对象,因为服务器上会为很多客户端开辟空间,session对
象有很多,都保存到session集合中,为了方便区分。为每一个session对象都指定了唯一
的标记,这个标记就是sessionid,接下来以sessionid创建cookie,键名为JSESSIONID,
通过cookie返回给客户端,客户端浏览器保存到内存cookie中。
场景2:紧接着第二次访问:
客户端请求中携带着第一次访问获得到的JSESSIONID到达服务器,服务器能够读取到
传递过来的sessionid,接下来就去session集合中根据id取到第一次请求的时候创建的
session对象为当前请求提供保存数据或者读取数据的功能,
第一次请求和第二个请求共用同一个session对象。
场景3:三十分钟后第三次访问:
客户端请求仍然携带JSESSIONID到达服务器,服务器根据id去集合中找对应的session
对象,但是此时已经超出30分钟,服务器已经自动将session对象销毁。所以此时虽然
有sessionid但是已经找不到session对象。然后服务器会重新创建一个新的session对象,
那么从这一次请求开始就是一个新的会话,第三次已经和第一次和第二次请求不共享同
一个session对象了。
场景4:紧接着关闭浏览器重新访问:
关闭浏览器意味着保存到浏览器内存中的cookie对象已经销毁,客户端请求就无法携带
JSESSIONID,这次请求相当于第一次请求,会重新创建新的session对象
场景5:浏览器禁止cookie访问:
浏览器禁用cookie那么意味着浏览器不提供保存cookie和每次请求携带cookie的功能,
那么服务器每次都无法获取JSESSIONID,每次都会创建新的session对象,相当于每次
请求都是一次新的会话

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值