Cookie与Session的区别与联系(收藏篇)

Written by

in

文章目录
  • 在 Web 开发中,Cookie 和 Session 都用于存储用户状态,解决 HTTP 协议的无状态性问题(即每次请求都是独立的,不会记住之前的状态)。但它们在 存储位置、数据安全性、使用场景 等方面存在明显区别。
  • 目录
    • Cookie vs. Session 详解
      • 1. Cookie 和 Session 的基本概念
        • 🔹 Cookie(客户端存储)
        • 🔹 Session(服务器端存储)
      • 2. Cookie vs. Session 的主要区别
        • 3. Cookie 的详细机制
          • 🔹 Cookie 的工作流程
          • 🔹 Cookie 示例
        • 4. Session 的详细机制
          • 🔹 Session 的工作流程
          • 🔹 Session 示例
        • 5. Cookie vs. Session 的适用场景
          • 6. Cookie 和 Session 的安全风险
            • 7. 结合使用 Cookie 和 Session(最佳实践)
              • 8. 总结

              在 Web 开发中,Cookie 和 Session 都用于存储用户状态,解决 HTTP 协议的无状态性问题(即每次请求都是独立的,不会记住之前的状态)。但它们在 存储位置、数据安全性、使用场景 等方面存在明显区别。

              • 存储位置:存放在客户端浏览器
              • 存储方式:以 键值对(key-value) 形式存储在浏览器。
              • 生命周期:可设置 过期时间,默认随浏览器会话结束而删除。
              • 用途
                • 记录用户信息(如用户名、购物车)。
                • 保存登录状态(如"记住我"功能)。
                • 跨页面、跨网站跟踪用户行为(如广告追踪)

              • 存储位置:存放在服务器
              • 存储方式:Session 数据存储在服务器内存或数据库,客户端仅保存 Session ID(通常存放在 Cookie 中)。
              • 生命周期
                • 默认随用户会话(Session)结束后删除(如关闭浏览器)。
                • 服务器可设置 Session 过期时间
              • 用途
                • 存储敏感信息(如用户登录状态、权限)。
                • 维护用户会话,如在线聊天、购物车等。
                • 适用于需要高安全性的场景

              对比项 Cookie Session
              存储位置 客户端(浏览器) 服务器端
              安全性 低(容易被篡改/劫持) 高(仅存 Session ID,数据在服务器端)
              数据大小 4KB 限制 无大小限制(取决于服务器)
              生命周期 可自定义,默认随浏览器关闭删除 默认随会话结束,服务器可设定过期时间
              访问方式 通过浏览器发送,所有请求自动携带 服务器端存取,客户端只存 ID
              存储敏感信息 不安全,不能存储敏感信息 安全,可存储用户登录状态、权限等
              服务器负担 低(数据存储在客户端) 高(每个用户的 Session 都占用服务器资源)
              跨域支持 可以跨域(需设置 SameSite=None; Secure 不能跨域(仅在当前域名有效)

              1. 服务器向客户端发送 Cookie
                • 服务器响应 Set-Cookie 头,客户端浏览器存储 Cookie。
              2. 客户端每次请求都会携带 Cookie
                • 浏览器会自动在 Cookie 头中携带 Cookie 数据发送给服务器。

              Set-Cookie: user=Alice; Expires=Wed, 10 Jul 2024 23:59:59 GMT; HttpOnly; Secure; SameSite=Strict
              • user=Alice → 存储的键值对。
              • Expires → 过期时间(如果未设置,则随会话结束)。
              • HttpOnly → 仅能通过 HTTP 访问,JavaScript 无法读取,防止 XSS 攻击。
              • Secure → 仅在 HTTPS 传输,防止被窃听。
              • SameSite=Strict → 防止跨站请求伪造(CSRF)攻击。
              Cookie: user=Alice

              1. 用户访问服务器,服务器创建 Session 并生成 Session ID
              2. Session ID 存储在 Cookie 中,返回给客户端。
              3. 客户端请求时自动携带 Session ID,服务器查找对应 Session 数据。

              # Flask 示例
              from flask import Flask, session
              app = Flask(__name__)
              app.secret_key = 'super_secret_key'  # 用于加密 Session
              @app.route('/')
              def index():
                  session['user'] = 'Alice'  # 存储用户信息
                  return 'Session set!'
              Cookie: sessionid=abc123
              • 服务器根据 sessionid=abc123 查找对应的 Session 数据。

              场景 推荐方案 原因
              记录用户偏好(如主题颜色) ✅ Cookie 无需存储敏感信息,存储在客户端更轻量
              保持用户登录状态 ✅ Session 更安全,防止用户篡改数据
              跨站点跟踪(如广告投放) ✅ Cookie Cookie 可跨域共享(带 SameSite=None
              存储购物车数据(非登录用户) ✅ Cookie 服务器不需要存储每个游客的数据
              存储购物车数据(登录用户) ✅ Session 服务器端更安全,防止篡改
              大数据存储 ❌ 都不适合 需使用数据库存储

              安全风险 Cookie Session 解决方案
              数据窃取(窃听) ✅ 高风险(明文传输) ✅ 低风险(仅存 Session ID) 使用 HTTPS 保护传输
              XSS(跨站脚本攻击) ✅ 高风险(JavaScript 可读取 Cookie) ❌ 低风险 设置 HttpOnly 防止 JavaScript 读取
              CSRF(跨站请求伪造) ✅ 高风险(自动携带) ✅ 中等 使用 SameSite=Strict 保护 Cookie
              Session 伪造(Session Fixation) ❌ 无影响 ✅ 高风险(Session ID 被窃取) 定期刷新 Session ID

              • Session 主要存储敏感信息,客户端仅存 Session ID
                • Cookie: sessionid=xyz123(只存 ID,不存用户信息)。
                • 服务器端查找 xyz123 关联的 Session 数据。
              • Cookie 存储非敏感信息(如用户设置)
                • 主题、语言、访问历史等。
              • 确保安全(防止 XSS & CSRF)
              • HttpOnly:防止 JavaScript 读取 Cookie。
              • Secure:仅 HTTPS 传输 Cookie,防止窃听。
              • SameSite:防止 CSRF 攻击。

              对比项 Cookie Session
              存储位置 客户端(浏览器) 服务器
              安全性 低(容易篡改) 高(仅存 Session ID)
              适用场景 记录用户偏好、广告追踪 登录状态、权限管理
              存储方式 浏览器 Cookie 服务器 Session ID

              推荐方案

              • 非敏感数据(如用户设置) → Cookie
              • 敏感数据(如登录状态) → Session
              • 加强安全性使用 HTTPS、HttpOnly、SameSite

              总结一句话:Cookie 适合存小数据,Session 适合存安全数据,实际开发中两者结合使用!

              到此这篇关于Cookie与Session的区别与联系的文章就介绍到这了,更多相关Cookie与Session区别内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

              您可能感兴趣的文章:

              • 老生常谈Session和Cookie之间区别与联系(必看篇)
              • 几句话说清session,cookie和token的区别及说明
              • 一文彻底理清session、cookie、token的区别
              • Cookies 和 Session的详解及区别
              • 浅谈cookie 和session 的区别
              • 浅谈COOKIE和SESSION区别

              站内搜索