Cookie和Session——登录状态管理

为什么要有Cookie和Session

HTTP协议被称为无状态(Stateless)协议

我们拿到请求的时候,不知道是谁发送的请求;但是在需求中,我们我们又需要知道是谁发送的信息,是在什么场景下发的,这很矛盾,所以引入了Cookie和Session

什么是Cookie和Session

Cookie,会员卡就是Cookie, 由服务器传递给客户端,并要求客户端有保存会员卡的职责+再次请求时携带会员卡的职责

Session维护在服务器端的档案信息
会员卡号(10086)被称为 Sesson-id

Web场景中
Cookie是属于HTTP协议标准规定的内容
Session并没有硬性规定,有各种方案实现。只要是类似概念即可
在这里插入图片描述

注意:
删了浏览器cookie,虽然服务器的session还在,但由于没有cookie,取不到,认为没登录
改了浏览器cookie,由于对应的session-id无法找到对应的session,认为没登录
重启服务器(session信息目前在内存中,所以没了),虽然浏览器的cookie还在,但找不到对应的session,认为没登录

开发者工具:
网络面板,可以查看请求中的Cookie头以及响应中的Set-Cookie头
应用面板,可以查看当前有的Cookie信息,也可以新增、修改、删除Cookie信息

浏览器有保存cookie的职责
浏览器有在以后请求时携带cookie的职责
携带同一个域下的所有cookie

在这里插入图片描述

Session管理对象,类似key-value
Map<Session-ld, HttpSession对象>一开始的时候的空的

HttpSession对象,类似key-value 
Map<String, Object>

req.getSession(boolean create);

取出本次请求对应的Session对象。

如果session-id可以取出对象,则create的值不重要。
如果session-id没法取出对象,则
create = true,会创建新的session对象,并返回
create = false,直接返回false

HttpSession session = req.getSession(false);

1.从请求中读取cookie值,其中name是JSESSIONID的值
在这里插入图片描述

HttpSession session = req.getSession(true);

可能cookie中没有session-id
也可能session-id找不到对应的HttpSession对象,HttpSession对象是null
由于create == true
创建Session对象

  1. 生成一个随机值作为sid : xxxyyyzzz
  2. 创建一个 HttpSession对象(key-value
  3. sid => HttpSession对象,添加到Session管理对象中
  4. 设置响应头:Set-Cookie: JSESSIONID=xxxyyyzz
    返回HttpSession对象

由于Tomcat运行过程中,Session管理对象有且仅有一份
在这里插入图片描述

实现注销(退出登录)

在这里插入图片描述
删除 xxxyyyzzz 可以快速达到效果,但是代价比较大
只删除 currentUser 影响最小

Cookie和Session的关系

本质上是两个独立的机制,只是90%场景下是配合使用的,但完全做到没有Session单独使用Cookie,以及没有Cookie,单独使用Session

Cookie:用来在浏览器和服务器之间交换信息的载体、机制
Servlet 中如何脱离Session使用Cookie:

  • 从请求中获取Cookie
    Cookie[] req.getCookies(); =>本次携带的所有Cookie信息
  • 向响应中种(设置)Cookie
    resp.addCookie(Cookie cookie)

简要了解cookie 里的其他属性

  • Domain :决定了Cookie所在的域,浏览器在发送请求时,只会携带同域下的所有cookie请求腾讯网,不应该携带百度的cookie
    www.qq.com和news.qq.com都是qq.com大域,又可以视为不同的子域,通过设置domain,在不同子域下生效

  • Path是根(/)所有路径都携带,而已可以通过设置路径,决定哪些路径下发送

  • Expires过期时间:没有cookie都可以设置过期时间
    超过过期时间的cookie,应该被浏览器删除,也不应该携带该cookie 了
    【现象:登录之后,一段时间里不用重复登录,但超过一定时间,就需要重新登录】

  • Expries:会话(Session)是同一个词,但不是一个含义 浏览器打开期间有效。关闭浏览器之后就失效了可以设置具体的时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值