- 📌 博主简介: 💻 努力学习的 23 级科班生一枚 🚀
- 🏠 博主主页 : 📎 @灰阳阳
- 📚 往期回顾 :Controller/RestController的区别
- 💬 每日一言:✨ 「润物无声」 🌿
目录
深入解析:Session与Cookie的核心原理及应用
在实际开发中,维护用户状态是 Web 应用不可或缺的一部分。由于 HTTP 协议本身是无状态的,因此需要借助 Cookie 和 Session 等技术来保存和传递用户信息。
本博客将详细介绍Session和Cookie的作用以及实现原理。
1. Cookie——客户端存储的小助手
作用
- 状态保持:Cookie 用于在浏览器与服务器之间传递少量数据,提升交互效率,或者为用户提供个性化设置。
某个网站存储cookies的提示(https://www.nature.com/):
包含的信息
Cookie 通常包含以下内容(都是键值对
):
- 名称(Name)和数值(Value):通常是简单的数据,如用户ID、认证标记等。
- 过期时间(Expires/Max-Age):决定 Cookie 的有效期限,过期后需要重新加载响应信息。
- 域(Domain)和路径(Path):限定 Cookie 的作用范围,只在指定域名或路径下有才效。
执行过程
- 服务器响应:当用户首次访问时,服务器在 HTTP 响应头中使用
Set-Cookie
字段发送 Cookie,把含有cookies信息的响应给到客户端。 - 浏览器存储:浏览器接收响应,并保存其中 的Cookie。
- 自动传递:在后续的 HTTP 请求中,浏览器会根据 Cookie 的域、路径等属性自动将其附加在请求头中。
2. Session——服务器端的用户状态管理
作用
- 安全存储用户数据:Session 将用户相关数据保存在服务器上,避免将敏感信息直接暴露在客户端。
- 简化管理&快速响应:通过 Session 可以方便地管理用户登录状态、购物车等信息,而无需每次都从数据库中查询,提升响应速度。
包含的信息
- 用户状态数据:如登录状态、用户权限、购物车内容等。
- 唯一标识符(Session ID):用于区分不同用户的会话。通常这个 ID 是随机生成且难以预测的。
执行过程
- 会话创建:当用户首次访问需要状态保持的资源时,服务器创建一个 Session 实例,并生成一个唯一的 Session ID。
- Session ID传递:服务器将 Session ID 通过 Cookie(或其他技术,如 URL 重写)发送到客户端。
- 状态恢复:在后续请求中,客户端会自动发送包含 Session ID 的 Cookie,服务器通过这个 ID 检索对应的 Session 数据。
3. Cookie 与 Session 的关系及各自优缺点
-
存储位置:
- Cookie:存储在客户端,容易被用修改,并且只能在响应头添加,传递信息有限。
- Session:存储在服务器端,更安全,但对服务器资源有一定消耗。
-
安全性:
- Cookie:需要设置合适的安全标识(比如Secure、HttpOnly)来降低风险。
- Session:虽然数据存储在服务器上,但如果 Session ID 泄露,也可能引发会话劫持,因此也需注意防范黑客攻击。
5. 总结
- Cookie 是一种在客户端存储少量数据的技术,通过 HTTP 头部传递信息,实现用户状态保持,但受容量和安全性等限制。
- Session 则将用户数据存储在服务器端,通过 Cookie 传递 Session ID 来恢复状态,虽然安全性更高,但也需要合理的管理服务器资源。