当前位置: 首页 > ds >正文

Cookie、Session、Token

Cookie


1. 什么是cookie?

  • Cookie 是一种由服务器发送到客户端浏览器的小数据片段,用于存储用户的状态信息。例如,用户登录状态或用户偏好设置可以通过Cookie进行管理。
  • 计算机cookie更正式地称为 HTTP cookie、网络 cookie、互联网 cookie 或浏览器 cookie。该名称是“魔术 cookie”的缩写版本,“魔术 cookie”是一个术语,指的是计算机接收并在不更改或更改的情况下发回的数据包。
  • Cookie 通常包含两部分数据:每个用户的唯一 ID 和网站名称。Cookie 使网站能够在你再次访问它们时检索这些信息,以便它们能够记住你和你的偏好,并根据这些信息为你定制页面内容。如果没有 cookie,你在离开网站后必须重新登录,或者在关闭网页后重新构建你的购物车。这使得 cookie 成为互联网体验的重要组成部分。

简单来说,cookie就相当于你的身份牌,假设一个场景,你现在是国家保密局特工,Cookie就相当于特工的身份牌,并且这个身份牌是加密的(需要暗号口令),用于验证身份(类似于对上口令就能进入保密区域)。你每天到保密区域工作,都需要这个身份牌,以及对口令。但这只是让你能够进去,但你真实的敏感信息(如你的任务、住址)是存储在保密局档案中(服务器中),通过令牌关联,保密局管理人员(服务器)校验无误后,从安全档案库中调取用户的状态和权限。这样的机制既保障了效率又避免了敏感数据暴露。(暗号口令相当于 Session )并且Session 是临时的,每天的暗号会更新,当你下班离开(关闭浏览器或 Session 过期),这个暗号就会失效,下次来需要重新生成新的暗号(重新创建Session)。

但在早期Web场景中,Cookie如同保密局特工的纸质身份牌,其上直接记录明文信息(如特工编号、临时权限),警卫(服务器)仅通过牌面内容验证身份,敏感信息虽部分存于档案库(服务器),但牌面数据可被直接篡改或窃取,存在越权风险;而现代Cookie则进化为电子身份令牌,仅存储无意义序列号(如 token=abc123 ),真实权限、任务等敏感信息加密存储于档案库,每次验证时令牌仅作为「钥匙」触发服务器查询,结合加密传输( Secure )、禁止前端读取( HttpOnly )等机制,既保障通行效率,又实现敏感数据零暴露,从「信息载体」彻底转变为「安全验证枢纽」。

2. Cookie的工作原理是怎么样的?

  1. 创建:服务器生成Cookie并将其发送到浏览器。
  2. 存储:浏览器在本地存储Cookie。
  3. 发送:浏览器在每次向服务器发起请求时自动附带相应的Cookie。

3. Cookie有哪些优缺点呢?

优点:

  • 客户端存储:Cookie存储在客户端,服务器负担较轻。
  • 自动发送每次请求时自动发送,适合无状态应用。

缺点

  • 容量限制:单个Cookie大小有限制,通常为4KB。
  • 安全性:易受CSRF(跨站请求伪造)攻击。
  • 易被篡改:Cookie内容可以被客户端修改,需加密处理。

Session


1 .什么是Session?

  • Session是在服务器端存储用户会话信息的机制。用户登录后,服务器为其创建一个唯一的Session ID,并将其发送到客户端,客户端将Session ID存储在Cookie中,用于后续的请求。

我们继续沿用刚才的特工例子,在这里,Cookie更像一个临时的身份牌,并且这张卡很小,只能记录简单的信息。并且有被窃取和伪造的风险(安全性低)。我们的门卫通过Cookie来查看身份信息,但不知道你具体的任务细节。而Session是总部的特工机密档案库,里面存储了你的所有信息和任务细节,并且你的ID编号是唯一的,只能通过你这个唯一ID去找。那么这些重要的档案绝不会交给你随身携带,而是被锁在总部(服务器端),只有总部(服务器)才能随时调取和修改。那么这样就大大增加了安全性。

2. Session的工作原理是怎么样的?

  • 创建:服务器创建Session并生成唯一的 Session ID。

  • 存储:用户的会话数据存储在服务器端。

  • 发送:服务器将 Session ID 发送到客户端,客户端将其存储在Cookie中。

  • 验证每次请求时,客户端将 Session ID 发送到服务器,服务器通过 ID 查找对应的会话数据。

3. Session有哪些优缺点呢?

优点:

  • 安全性高:敏感数据存储在服务器端,减少数据被篡改的风陷。
  • 容量大:可以存储更多的数据。

缺点:

  • 服务器负担:服务器需要维护和存储会话状态,可能会增加负担。
  • Session过期:如果服务器崩溃,Session可能会消失。

我们可以说,Session是Cookie技术的延伸,Cookie在客户端标记用户身份,而Session是负责在服务器端存储用户的状态。我们为了弥补Cookie技术的不足,所以才引入了Session机制。并且Session是无法独立工作的,我们必须通过Cookie传递一个唯一的标识——Session ID。


Token


1. 什么是Token?

  • Token是一种自包含的数据结构,用于存储用户的身份信息,常见的Token形式有 JWT(JSON Web Token)和 OAuth Token。

我们继续沿用上面的特工举例,对比Cookie和Session,Token更像是总部给特工的一次性密码本,里面包含了所有的信息(包括你的ID,权限,任务细节并加上签名),那我们到达执行任务的地点,只需要把这个一次性密码本给门卫看,门卫(服务器)通过验证签名,来确保密码本没有被篡改,并直接读取任务信息,无需再找总部获取档案。

2.Token的工作原理是怎么样的?

  • 创建服务器生成Token,并包含用户信息。

  • 发送Token发送到客户端,通常由HTTP头部传输。

  • 存储:客户端可以将Token存储在 Local Storage 或 Session Storage 中。

  • 验证客户端将Token加入到每次请求中,服务器验证Token的有效性。

3.Token有哪些优缺点呢?

优点

  • 自包含:Token包含了所有必要信息,适合无状态的认证机制。

  • 扩展性好支持分布式系统和微服务架构。

缺点

  • 安全问题:Token一旦泄露可能会被恶意使用。
  • 过期管理:需要额外的机制来处理Token的过期和刷新。

我们可以说 Token 是去中心化的身份凭证,Cookie 和 Session 都需要依赖服务器存储状态,而Token是让客户端自带信息,并且这个信息是一次性的。


Cookie、Session、token 的对比


Cookie 的核心风险在于 浏览器自动管理(自动发送、存储于客户端) 的特性。容易成为攻击者的目标。攻击者可以诱导用户访问恶意网站。

Session 数据存储在服务器内存或数据库中,一旦服务器被攻击(如SQL注入、文件漏洞),攻击者可直接窃取所有用户的 Session 数据。

Token 通常需要客户端主动携带(如放在请求头或URL参数中),而非浏览器自动发送,攻击者难以通过跨站请求伪造(CSRF)获取或利用Token。

特性CookieSessionToken
存储位置客户端存储服务器端存储,客户端存储Session ID客户端存储
安全性易受CSRF攻击更安全,敏感数据存储在服务器端一旦泄露可能被盗用
容量4KB限制服务器端可以存储更多的数据受限于 Token 大小
性能自动随请求发送服务器需要维护状态、增加负担无状态机制,适合分布式应用
使用场景适合简单的用户状态管理适合需要存储大量用户数据的应用适合需要无状态认证和分布式系统的应用

http://www.xdnf.cn/news/6968.html

相关文章:

  • 自定义类、元组、字典和结构体对比——AutoCAD C# 开发中建立不同对象之间的联系
  • 灵光一现的问题和常见错误2
  • C语言:在 Win 10 上,g++ 如何编译 gtk 应用程序
  • Android核心系统服务:AMS、WMS、PMS 与 system_server 进程解析
  • cursor/vscode启动项目connect ETIMEDOUT 127.0.0.1:xx
  • 鸿蒙ArkUI体验:Hexo博客客户端开发心得
  • JVM 调优实战入门:从 GC 日志分析到参数调优
  • 基于requests_html的python爬虫
  • Redis——缓存雪崩、击穿、穿透
  • 内容安全:使用开源框架Caffe实现上传图片进行敏感内容识别
  • HMDB51数据集划分
  • V 型不锈钢对夹球阀:高性价比流体控制的优选方案-耀圣
  • 联想笔记本黑屏了,排线出问题还是静电
  • QT调用Halcon查询所有摄像头名称
  • 遨游科普:三防平板是什么?有什么功能?
  • Linux安全篇 --firewalld
  • Windows系统永久暂停更新操作步骤
  • 微软家各种copilot的AI产品:Github copilot、Microsoft copilot
  • 什么是PMBus
  • 18-总线IIC
  • 大模型在腰椎间盘突出症预测与治疗方案制定中的应用研究
  • LeetCode 热题 100_寻找重复数(100_287_中等_C++)(技巧)(暴力解法;哈希集合;二分查找)
  • 字节2025实习/校招/社招 内推码:R9SZ7Y1
  • 车载以太网驱动智能化:域控架构设计与开发实践
  • 【Ubuntu】Waydroid-Linux安卓模拟器安装
  • 【数据结构】线性表--队列
  • 自动化脚本开发:Python调用云手机API实现TikTok批量内容发布
  • 卷积神经网络中的二维卷积与三维卷积详解
  • 山东大学计算机图形学期末复习10——CG12下
  • Redis设计与实现——分布式Redis