Cookie和Session
一、Cookie 是什么?
Cookie 是服务器发给客户端(浏览器)的一小块文本数据,保存在用户的浏览器里,每次浏览器向同一个服务器发起请求时,都会自动带上这个 Cookie,服务器就能识别用户了。
核心特点
- 由服务器生成,通过
Set-Cookie响应头发送给浏览器 - 保存在客户端本地(浏览器里)
- 有大小限制:单个 Cookie 最大约 4KB,单域名下 Cookie 数量有限
- 可以设置过期时间:
- 会话 Cookie:关闭浏览器就失效
- 持久 Cookie:设置
max-age或expires,到指定时间才失效
- 会自动随请求发送,只要请求的域名和路径匹配
- 可以被用户查看、修改、删除,安全性不高
举个栗子
你第一次登录淘宝,服务器给你发了一个 Cookie:user_id=12345,存在你的浏览器里。之后你每次访问淘宝页面,浏览器都会自动带上这个 Cookie,服务器一看 “哦,是用户 12345”,就不用你再输一遍账号密码了。
二、Session 是什么?
Session 是服务器端为用户开辟的一块内存空间,用来存储用户的会话数据(比如登录状态、购物车信息)。每个用户的 Session 都有一个唯一的 SessionID,服务器通过这个 ID 来区分不同用户。
核心特点
- 数据保存在服务器端(内存 / 数据库 / Redis 里)
- 依赖 Cookie 传递
SessionID:服务器会把SessionID以 Cookie 的形式发给浏览器,浏览器下次请求时带上这个 Cookie,服务器就能找到对应的 Session 数据 - 数据不会暴露在客户端,比 Cookie 安全
- 服务器重启 / 会话超时,Session 数据会丢失(分布式场景需要 Redis 等存储来共享 Session)
举个栗子
你登录淘宝时,服务器创建了一个 Session,存了你的 is_login=true 和购物车信息,同时给你发了一个 Cookie:sessionid=abcdefg。之后你访问购物车页面,浏览器带上 sessionid=abcdefg,服务器根据这个 ID 找到你的 Session,把购物车数据返回给你。
三、Cookie 和 Session 的核心区别
表格
| 对比维度 | Cookie | Session |
|---|---|---|
| 存储位置 | 客户端(浏览器) | 服务器端(内存 / 数据库 / Redis) |
| 存储大小 | 单个 Cookie 约 4KB,总量有限 | 理论上无限制,取决于服务器配置 |
| 安全性 | 数据明文保存在客户端,易被篡改、窃取 | 数据存在服务器,客户端只存 SessionID,更安全 |
| 生命周期 | 可设置永久 / 会话级,关闭浏览器可保留 | 一般是会话级,服务器重启 / 超时就失效 |
| 依赖关系 | 独立存在,也可被 Session 依赖 | 依赖 Cookie 传递 SessionID(也可通过 URL 传递) |
| 用途 | 存储少量非敏感数据(比如用户偏好、主题设置) | 存储用户会话数据(比如登录状态、购物车) |
四、Cookie 和 Session 的关系
它们俩通常是搭档关系:
- 用户第一次访问服务器,服务器创建 Session,生成唯一的
SessionID - 服务器通过
Set-Cookie响应头,把SessionID发给浏览器,浏览器保存为 Cookie - 用户后续每次请求,浏览器都会自动带上这个 Cookie(里面的
SessionID) - 服务器收到请求后,根据
SessionID找到对应的 Session 数据,识别用户身份
特殊情况:如果用户禁用了 Cookie,也可以通过 URL 参数传递
SessionID(比如xxx.com?sessionid=abcdefg),但这种方式不安全,不推荐。
五、常见问题澄清
❌ 误区:“Session 就是 Cookie”✅ 真相:Session 是服务器端存储,Cookie 是客户端存储,Session 通常依赖 Cookie 传递 ID,但两者不是同一个东西。
❌ 误区:“用了 Session 就不用 Cookie 了”✅ 真相:绝大多数场景下,Session 都需要 Cookie 来传递 SessionID,没有 Cookie 服务器就找不到用户的 Session。
❌ 误区:“Cookie 不安全,Session 绝对安全”✅ 真相:Session 也不是绝对安全,比如 SessionID 被窃取(XSS 攻击),攻击者就能冒充用户登录。
六、一句话总结
- Cookie:客户端存数据,服务器通过它识别用户;
- Session:服务器存数据,用 Cookie 传递 SessionID 来绑定用户;
- 两者配合,实现了 Web 应用的会话保持和用户状态管理。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)