一句话说透计算机网络里面的Cookie和Session的作用和原理

323 阅读2分钟

一句话总结:
Cookie 是用户随身携带的会员卡,Session 是店里的会员档案,两者配合让服务器记住你是谁!


一、Cookie:用户的会员卡

作用

  • 身份标识:记录用户基本信息(如登录状态、语言偏好)。
  • 跟踪行为:记录浏览历史、购物车内容。

原理

  1. 发卡:用户首次访问网站,服务器通过 Set-Cookie 响应头下发“会员卡”。

    HTTP/1.1 200 OK  
    Set-Cookie: user_id=123; Path=/; Expires=Wed, 21 Oct 2023 07:28:00 GMT  
    
  2. 出示:后续每次请求,浏览器自动在请求头中夹带 Cookie。

    GET /profile HTTP/1.1  
    Cookie: user_id=123  
    

特点

  • 存在客户端:浏览器存储,可被用户查看或禁用。
  • 大小限制:单个 Cookie ≤4KB,每个域名下最多约50个。

安全贴士

  • 敏感信息别存Cookie:如密码,用 HttpOnly 和 Secure 标志防XSS和明文传输。

二、Session:店里的会员档案

作用

  • 安全存储:保存敏感信息(如用户ID、权限、购物车详情)。

原理

  1. 建档:用户登录后,服务器创建Session(如存入Redis),生成唯一 Session ID
  2. 关联:将 Session ID 通过Cookie发给用户(如 JSESSIONID=abc123)。
  3. 查档:用户后续请求携带 Session ID,服务器据此读取档案。

代码示例(Java):

// 创建Session并存数据  
HttpSession session = request.getSession();  
session.setAttribute("user", loggedInUser);  

// 读取Session数据  
User user = (User) session.getAttribute("user");  

特点

  • 存在服务端:内存、数据库或Redis,用户无法直接修改。
  • 依赖Cookie传ID:若禁用Cookie,需URL重写(如 ;jsessionid=abc123)。

三、Cookie vs Session 对比表

特性CookieSession
存储位置浏览器服务器
安全性低(用户可篡改)高(服务端控制)
数据大小小(≤4KB)大(受服务器内存限制)
生命周期可设置长期有效通常随会话结束(浏览器关闭)
性能影响无(客户端存储)有(服务器查询开销)

四、协作流程(咖啡店会员为例)

  1. 首次进店(无卡)

    • 你点咖啡,店员(服务器)问手机号(登录)→ 创建档案(Session)→ 给你会员卡(Cookie含Session ID)。
  2. 再次进店(有卡)

    • 出示会员卡(Cookie)→ 店员查档案(Session)→ 直接按喜好推荐咖啡。
  3. 会员卡丢了(Cookie失效)

    • 需重新登录 → 发新卡(新Session ID)。

五、常见问题

1. 禁用Cookie怎么办?

  • URL重写:将Session ID附加在URL后(如 <a href="/cart;jsessionid=abc123">),但安全性差。

2. 如何防止Session劫持?

  • HTTPS:加密传输Session ID。
  • 定期更换Session ID:用户登录后生成新ID。
  • 绑定IP/User-Agent:校验来源一致性。

3. 分布式系统如何共享Session?

  • 集中存储:用Redis或数据库存Session,多服务器共享。

总结口诀

“Cookie小卡随身带,Session档案存后台。
登录状态靠它俩,无状态HTTP不再衰。
敏感数据放Session,Cookie传ID别乱来!”