什么是cookie和session,及二者之间的关系

我们打开网页时,有时会弹出弹窗,询问是否接受cookie?那么究竟什么是cookie,其又有什么作用?

一、各自是什么?

名称存放位置作用生命周期(默认)
Cookie浏览器本地(随域名保存的小键值对)把数据随每次 HTTP 请求自动带给同一域名的服务器浏览器关闭或 Expires/Max-Age 到期
Session服务器内存 / Redis / 数据库等保存“一整份”与用户相关的会话数据(登录状态、购物车、权限等)通常设闲置超时 + 服务器重启即失效

二、它们怎么协作?——会话识别 流程

  1. 首次请求
    浏览器 → 服务器(没有 Cookie)。

  2. 服务器创建 Session

    • 生成 随机的 SessionID(如 2f8e5c9aa...)。

    • 把用户状态存在服务器端的 Session 存储里,键就是这个 ID。

  3. 服务器回响应

    • Set-Cookie 里写入 session_id=2f8e5c9aa...; Path=/; HttpOnly; Secure

  4. 后续请求

    • 浏览器自动带上 Cookie: session_id=2f8e5c9aa...

    • 服务器按 session_id 找回 Session 数据,识别出同一位用户。

关键点:

  • Cookie 里通常只放一个轻量的 Session 标识;真正的会话数据仍在服务器,因此更安全,可存任意复杂结构。

  • 如果浏览器禁用 Cookie,可以用 URL 重写、隐藏表单字段等方式携带 SessionID,但体验与安全性都会下降。

 

三、两者的典型区别

维度CookieSession
存储方客户端服务器
容量单个 ~4 KB,域名上限约 20 个取决于服务器资源
安全性容易被窃取/篡改,需要加 HttpOnly、Secure、SameSite服务端掌控,配合 HTTPS 更安全
跨域受同源策略,无法跨二级域以外不受限制,可在同一 DB 中共享
适用场景记住主题色、上次搜索词、简单持久化登录态、购物车、权限控制、临时大数据

 

四、衍生方案:无状态 Token 与持久化 Session

方案核心思路与 Cookie/Session 的关系
JWT / OAuth2 Token服务端只生成签名过的 Token 并返回,后续校验 Token 签名,不依赖服务器存储Token 可放在 Cookie 或 Header,减少服务器 Session 压力
Session 持久化(Redis、DB)把 Session 数据持久化,支持分布式、断电恢复仍需 Cookie 储存 SessionID,但服务器可水平扩展


五、总结一句话

Cookie 是客户端保存的“凭条”;Session 是服务器保存的“档案”。浏览器拿着 Cookie(SessionID)来办事,服务器据此查档,才能认出它是谁。

二者结合使用,就能在 “HTTP 无状态” 的世界里,为同一位用户维持有状态安全的交互体验。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值