⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:JavaEE
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖
Cookie&Seesion
1. Cookie
HTTP协议是属于“无状态”协议(默认情况下 HTTP 协议的客⼾端和服务器之间的这次通信和下次通信之间没有直接的联系)。
但是在实际开发中,很多时候需要知道请求之间的关联联系。
例如:登陆一个页面后,我们在访问其他页面的时候,仍需要登陆时的信息。
上图中的“令牌”通常就存储在Cookie中。
就比如学生证,学校收集完学生的信息后(姓名、性别、专业、班级…),然后给学生发一个可以进出校园的学生证。这些信息就是Session,而学生证就是Cookies。
2. Session
2.1 会话
在计算机领域,会话是⼀个客⼾与服务器之间的不中断的请求响应。
对客⼾的每个请求,服务器能够识别出请求来⾃于同⼀个客⼾。当⼀个未知的客⼾向Web应⽤程序发送第⼀个请求时就开始了⼀个会话,当客⼾明确结束会话或服务器在⼀个时限内没有接受到客⼾的任何请求时,会话就结束了。
服务器同⼀时刻收到的请求是很多的。服务器需要清楚的区分每个请求是从属于哪个⽤⼾,也就是属于哪个会话,就需要在服务器这边记录每个会话以及与⽤⼾的信息的对应关系,Session是服务器为了保存⽤⼾信息⽽创建的⼀个特殊的对象。
2.2 概念
Session的本质就是⼀个“哈希表”,存储了⼀些键值对结构,Key 就是SessionID,Value 就是⽤⼾信息(⽤⼾信息可以根据需求灵活设计)。
客户与服务器之间的请求与响应:
Session 默认是保存在内存中的。如果重启服务器则 Session 数据就会丢失
3. 区别与联系
Cookie 是客⼾端保存⽤⼾信息的⼀种机制。Session 是服务器端保存⽤⼾信息的⼀种机制。
- Cookie 和 Session之间主要是通过 SessionId 关联起来的,SessionId 是 Cookie 和 Session 之间的桥梁
- Cookie 和 Session 经常会在⼀起配合使⽤,但是不是必须配合
- 完全可以⽤ Cookie 来保存⼀些数据在客⼾端。这些数据不⼀定是⽤⼾⾝份信息,也不⼀定是
SessionId - Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递,⽐如通过URL传递
- 两者都是会话机制。Cookie是客户端机制,Session是服务器端机制
- Cookie中存储的信息由程序员而定