在讲 HTTP 协议时, 我们就谈到了 Cookie 和 Session, 当时我们只是粗略一提, 并简单举了个登录流程的例子来说明他们. 本文我们继续再来聊聊.
关注收藏, 开始学习吧
HTTP 协议自身是属于 “无状态” 协议.
“无状态” 的含义指的是: 默认情况下 HTTP 协议的客户端和服务器之间的这次通信, 和下次通信之间没有直接的联系.
但是实际开发中, 我们很多时候是需要知道请求之间的关联关系的.
例如登陆网站成功后, 第二次访问的时候服务器就能知道该请求是否是已经登陆过了.
Cookie 是浏览器在本地持久化存储数据的一种机制.
是服务器返回给浏览器的.
是键值对结构的数据, 并且这里的键值都是程序员自己定义的.
可以在浏览器这边存储一些 “临时性的数据”, 其中最典型的一种使用方式, 就是用来存储 “身份标识”. (涉及到 Cookie 和 Session 之间的联动, 我们下面讲)
会在下次访问该网站的时候, 自动的被带到 HTTP 请求中去. (直到 Cookie 过期)
浏览器根据不同的 “域名” 分别存储 Cookie, 不同域名之间的 Cookie 互不干扰. 一般都是存储在当前设备的硬盘上, 如果更换设备, Cookie 就会丢失. 即使不更换设备, Cookie 也会过期(会有一个超时时间).
浏览器上的一个登录流程
回忆之前的例子:
- 到了医院先挂号. 挂号时候需要提供身份证, 同时得到了一张 “就诊卡”, 这个就诊卡就相当于患者的 “令牌”.
- 后续去各个科室进行检查, 诊断, 开药等操作, 都不必再出示身份证了, 只要凭就诊卡即可识别出当前患者的身份.
- 看完病了之后, 不想要就诊卡了, 就可以注销这个卡. 此时患者的身份和就诊卡的关联就销毁了. (类似于网站的注销操作)
- 又来看病, 可以办一张新的就诊卡, 此时就得到了一个新的 “令牌”
此时在服务器这边就需要记录令牌信息, 以及令牌对应的用户信息, 这个就是 Session 机制所做的工作.
服务器同一时刻收到的请求是很多的. 服务器需要清除的区分清楚每个请求是从属于哪个用户, 就需要在服务器这边记录每个用户令牌以及用户的信息的对应关系.
在去医院看病中, 就诊卡就是一张 “令牌”. 要想让这个令牌能够生效, 就需要医院这边通过系统记录每个就诊卡和患者信息之间的关联关系.
会话的本质就是一个 “哈希表”, 存储了一些键值对结构. key 就是令牌的 ID(token/sessionId), value 就是用户信息(用户信息可以根据需求灵活设计).
sessionId 是由服务器生成的一个 “唯一性字符串”, 从 session 机制的角度来看, 这个唯一性字符串称为 “sessionId”. 但是站在整个登录流程中看待, 也可以把这个唯一性字符串称为 “token”.
sessionId 和 token 就可以理解成是同一个东西的不同叫法(不同视角的叫法).
Servlet 的 Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失.
✨ 本文主要讲了 Cookie 和 Session 相关知识.
✨ 想了解更多计算机网络的知识, 可以收藏一下本人的计算机网络学习专栏, 里面会持续更新本人的学习记录, 跟随我一起不断学习.
✨ 感谢你们的耐心阅读, 博主本人也是一名学生, 也还有需要很多学习的东西. 写这篇文章是以本人所学内容为基础, 日后也会不断更新自己的学习记录, 我们一起努力进步, 变得优秀, 小小菜鸟, 也能有大大梦想, 关注我, 一起学习.
再次感谢你们的阅读, 你们的鼓励是我创作的最大动力!!!!!