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

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 大小
性能自动随请求发送服务器需要维护状态、增加负担无状态机制,适合分布式应用
使用场景适合简单的用户状态管理适合需要存储大量用户数据的应用适合需要无状态认证和分布式系统的应用

相关文章:

  • 关于此站点更改通知.top域名后期将统一更换为snowytime.cn访问,其余top访问进入过渡期
  • 使用 Kotlin 和 Jetpack Compose 开发 Wear OS 应用的完整指南
  • Elasticsearch 性能优化面试宝典
  • Redis设计与实现——分布式Redis
  • 【从设置到上传的全过程】本地多个hexo博客,怎么设置ssh才不会互相影响
  • RAID学习笔记
  • vue 模板二次开发准备
  • WebXR教学 09 项目7 使用python从0搭建一个简易个人博客
  • 【Linux网络】NAT和代理服务
  • Python训练打卡Day26
  • Unbuntu 命令
  • Visual Studio2022跨平台Avalonia开发搭建
  • JVM 双亲委派机制
  • windows编写和调试代码工具——IDE安装
  • MATLAB中进行深度学习网络训练的模型评估步骤
  • .NET Core 中 Swagger 配置详解:常用配置与实战技巧
  • 【gitee 初学者矿建仓库】
  • 使用Maven部署应用到TongWeb(东方通应用服务器)
  • 【论文阅读】针对BEV感知的攻击
  • React中startTransition的使用
  • 南京艺术学院博导、雕塑家尹悟铭病逝,年仅45岁
  • 芬兰西南部两架直升机相撞坠毁,第一批救援队已抵达现场
  • 试点首发进口消费品检验便利化措施,上海海关与上海商务委发文
  • 董军同德国国防部长举行会谈
  • 泽连斯基启程前往土耳其
  • 中欧金融工作组第二次会议在比利时布鲁塞尔举行