一、Cookie 是什么?

Cookie 是服务器发给客户端(浏览器)的一小块文本数据,保存在用户的浏览器里,每次浏览器向同一个服务器发起请求时,都会自动带上这个 Cookie,服务器就能识别用户了。

核心特点

  • 由服务器生成,通过 Set-Cookie 响应头发送给浏览器
  • 保存在客户端本地(浏览器里)
  • 有大小限制:单个 Cookie 最大约 4KB,单域名下 Cookie 数量有限
  • 可以设置过期时间:
    • 会话 Cookie:关闭浏览器就失效
    • 持久 Cookie:设置 max-ageexpires,到指定时间才失效
  • 会自动随请求发送,只要请求的域名和路径匹配
  • 可以被用户查看、修改、删除,安全性不高

举个栗子

你第一次登录淘宝,服务器给你发了一个 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 的关系

它们俩通常是搭档关系

  1. 用户第一次访问服务器,服务器创建 Session,生成唯一的 SessionID
  2. 服务器通过 Set-Cookie 响应头,把 SessionID 发给浏览器,浏览器保存为 Cookie
  3. 用户后续每次请求,浏览器都会自动带上这个 Cookie(里面的 SessionID
  4. 服务器收到请求后,根据 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 应用的会话保持和用户状态管理。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐