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

 更新时间:2025年08月21日 16:26:18   作者:Zero_pl  
Cookie存储在客户端浏览器,用于非敏感信息及跨域跟踪,Session存储在服务器,用于敏感数据及会话管理,两者结合使用可兼顾安全与效率,Cookie存小数据,Session存安全数据,下面给大家介绍Cookie与Session的区别与联系,感兴趣的朋友一起看看吧

Cookie vs. Session 详解

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

1. Cookie 和 Session 的基本概念

🔹 Cookie(客户端存储)

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

🔹 Session(服务器端存储)

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

2. Cookie vs. Session 的主要区别

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

3. Cookie 的详细机制

🔹 Cookie 的工作流程

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

🔹 Cookie 示例

(1) 服务器设置 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)攻击。
(2) 客户端自动携带 Cookie
Cookie: user=Alice

4. Session 的详细机制

🔹 Session 的工作流程

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

🔹 Session 示例

(1) 服务器创建 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!'
(2) 浏览器请求时自动携带 Session ID
Cookie: sessionid=abc123
  • 服务器根据 sessionid=abc123 查找对应的 Session 数据。

5. Cookie vs. Session 的适用场景

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

6. Cookie 和 Session 的安全风险

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

7. 结合使用 Cookie 和 Session(最佳实践)

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

8. 总结

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

推荐方案

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

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

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

相关文章

  • 看完工资立马翻3倍!(非程序员勿看)

    看完工资立马翻3倍!(非程序员勿看)

    负责粘贴你也可以做到!
    2019-02-02
  • 万万没想到Chrome的历史记录竟然可以这么玩

    万万没想到Chrome的历史记录竟然可以这么玩

    最近遇到一个棘手的问题,需要查找含有某个关键字的网页,但是通过chrome原生的历史记录查出来的,查到的结果并不满意,今天小编就给大家分享一篇教程帮助大家解决Chrome历史记录的问题,感兴趣的朋友一起看看吧
    2020-10-10
  • Windows下安装Git

    Windows下安装Git

    这篇文章介绍了Window下安装Git的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 4G与5G的区别有哪些

    4G与5G的区别有哪些

    说起5G,现在在网络中已经是很常见的了,亦是未来生活的新标杆,接下来我们便一起来学习5G和4G有什么不同
    2021-08-08
  • Git中tag标签的使用教程

    Git中tag标签的使用教程

    这篇文章介绍了Git中tag标签的使用教程,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 如何在本地部署DeepSeek大模型实现联网增强的AI应用

    如何在本地部署DeepSeek大模型实现联网增强的AI应用

    本文介绍了如何使用Microsoft SemanticKernel框架结合DeepSeek本地模型和自定义搜索技能,构建一个具备联网增强能力的智能应用,文章还提供了一个应用场景示例,说明如何在本地部署DeepSeek大模型并实现联网增强的AI应用,感兴趣的朋友一起看看吧
    2025-02-02
  • 利用ChatGPT与MindShow制作一个PPT的方法详解

    利用ChatGPT与MindShow制作一个PPT的方法详解

    PPT制作是商务、教育和各种场合演讲的重要组成部分,然而,很多人会花费大量时间和精力在内容生成和视觉设计方面,为了解决这个问题,我们可以利用两个强大的工具——ChatGPT和MindShow,来提高制作PPT的效率,感兴趣的同学可以参考阅读
    2023-06-06
  • 面试官常问问题之127.0.0.1和localhost有什么区别

    面试官常问问题之127.0.0.1和localhost有什么区别

    在计算机网络中,IP地址用于标识网络上的设备,了解127.0.0.1(也称为回环地址或localhost)与本机IP地址之间的区别对于理解网络通信至关重要,这篇文章主要介绍了面试官常问问题之127.0.0.1和localhost有什么区别的相关资料,需要的朋友可以参考下
    2026-03-03
  • so easy!10行代码写个

    so easy!10行代码写个"狗屁不通"文章生成器功能

    这篇文章主要介绍了通过10行代码写个"狗屁不通"文章生成器功能,真的超级简单,感兴趣的朋友跟随脚本之家小编一起看看吧
    2020-01-01
  • 故障排查指南之深入理解与解决“No route to host“错误

    故障排查指南之深入理解与解决“No route to host“错误

    这篇文章主要介绍了故障排查指南之深入理解与解决“No route to host“错误的相关资料,该错误通常表示客户端机器知道目标服务器的IP地址,但无法找到有效的路径将数据包送达该地址,需要的朋友可以参考下
    2025-12-12

最新评论