会话跟踪技术之Cookie、Session 和 Token三种技术对比
Cookie、Session 和 Token 是解决 HTTP 无状态性的三种核心会话技术,各有其原理、优缺点和适用场景。以下综合分析:
1. Cookie
原理
存储位置:客户端(浏览器)存储小型文本数据(通常 ≤4KB),通过 HTTP 头的
Set-Cookie由服务器下发,浏览器后续请求自动附加Cookie头发送。工作流程:
① 服务器响应时设置Set-Cookie: key=value;
② 浏览器保存 Cookie,后续请求自动携带;
③ 服务器解析 Cookie 识别用户状态。
优点
简单易用:浏览器自动管理,无需额外代码。
轻量级:适合存储小型数据(如用户偏好、语言设置)。
缺点
安全性低:易受 XSS(窃取 Cookie)和 CSRF(伪造请求)攻击。
容量限制:单个域名 Cookie 数量有限(通常 ≤20个),总大小 ≤4KB。
跨域限制:受同源策略约束,第三方 Cookie 逐渐被浏览器限制。
应用场景
用户偏好设置(如主题、语言);
简单会话跟踪(配合 Session ID);
低敏感度数据存储(如购物车商品 ID)。
2. Session
原理
存储位置:服务器端存储用户会话数据(如内存、Redis),客户端仅保存 Session ID(通常通过 Cookie 传递)。
工作流程:
① 用户首次访问,服务器生成唯一 Session ID 并存入 Cookie;
② 后续请求携带 Session ID,服务器据此检索会话数据。
优点
安全性高:敏感数据(如用户身份)存储在服务端,客户端无法篡改。
支持大数据:无存储限制,适合复杂状态(如多步骤表单、购物车详情)。
缺点
服务器压力:海量用户时占用大量内存/数据库资源。
扩展性差:分布式集群需 Session 共享(如 Redis 集群),否则负载均衡失效。
依赖 Cookie:若浏览器禁用 Cookie,需 URL 重写传递 Session ID(不安全)。
应用场景
高安全性需求场景(如银行登录、支付流程);
服务端状态管理(如电商购物车、用户登录状态)。
3. Token(以 JWT 为例)
原理
存储位置:客户端存储加密字符串(如 LocalStorage 或 Cookie),通过请求头(如
Authorization: Bearer <token>)手动发送。结构:JWT 包含三部分(Base64 编码):
- Header:算法类型(如 HS256);
- Payload:用户信息(如用户 ID、过期时间
exp); - Signature:服务器私钥签名,防篡改。
验证流程:服务器用密钥验证签名和有效期,无需查询数据库。
优点
无状态 & 高扩展:服务器无需存储会话,天然支持分布式系统和跨域访问。
安全性增强:签名防篡改,且可避免 CSRF(依赖手动传 Token)。
多平台兼容:适合移动端/API 服务(如 RESTful API、单点登录 SSO)。
缺点
Token 泄露风险:一旦被盗用,攻击者可冒充用户(需设短有效期 + Refresh Token 续签)。
无法主动废止:除非引入 Token 黑名单(违背无状态初衷)。
Payload 大小:携带用户信息可能增大请求体积。
应用场景
前后端分离架构(如 SPA、移动 App);
跨域认证(如 OAuth 2.0、第三方 API 集成);
微服务或无状态服务集群。
⚖️ 三方案核心对比
| 特性 | Cookie | Session | Token(如JWT) |
|---|---|---|---|
| 存储位置 | 客户端(浏览器) | 服务端(内存/DB) | 客户端(LocalStorage) |
| 数据传输方式 | 自动通过 Cookie 头 |
依赖 Session ID(通常通过 Cookie) | 手动添加请求头(如 Authorization) |
| 安全性 | 低(易受 XSS/CSRF) | 高(数据在服务端) | 中高(需 HTTPS + 签名) |
| 扩展性 | 无状态 | 需共享存储(如 Redis) | 无状态,天然支持分布式 |
| 跨域支持 | 受限(同源策略) | 受限 | 支持 |
| 典型场景 | 用户偏好、简单状态跟踪 | 高安全会话(如支付) | API 认证、SSO、移动端 |
技术选型建议
传统 Web 应用:使用 Session + Cookie(如 PHP/JSP),兼顾安全性与状态管理。
分布式/跨域系统:首选 Token(如 JWT),避免 Session 共享瓶颈。
混合方案:将 JWT 存入 HttpOnly Cookie,平衡安全性与无状态性。
例如:电商网站核心支付流程用 Session 管理购物车,而用户认证采用 Token 实现跨子域单点登录。
通过理解三者的原理和适用边界,可针对业务需求(安全性、扩展性、架构类型)灵活组合,构建高效安全的会话体系 。
会话跟踪技术之Cookie、Session 和 Token三种技术对比的更多相关文章
- c# Cookie,Session,Application,Cache 四种缓存使用情景
好记性不如烂笔头,记录一下C#缓存使用的情景模式....个人理解,不正之处,欢迎指正 讨论 Cookie,Session,Application,Cache 四种,有的缓存情景对人,有的缓存情景对事儿 ...
- 【转载】目前主流过滤XSS的三种技术
目前主流过滤XSS的三种技术 过滤 过滤,顾名思义,就是将提交上来的数据中的敏感词汇直接过滤掉.例如对"<script>"."<a>". ...
- ASP.NET MVC:多语言的三种技术处理策略
ASP.NET MVC:多语言的三种技术处理策略 背景 本文介绍了多语言的三种技术处理策略,每种策略对应一种场景,这三种场景是: 多语言资源信息只被.NET使用. 多语言资源信息只被Javascrip ...
- 设置session超时的三种方式
设置session超时的三种方式 1. 在容器中设置:如在tomcat-7\conf\web.xml中设置 Tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制sess ...
- Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...
- Cookie Session 与Token
由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ...
- 让Session失效的三种方法
我们设置SESSION失效的时间,是为了确保在用户长时间不与服务器交互的情况下,可以自动退出登录.本文介绍了三种设置SESSION失效的方法,希望对你有帮助. Session对象是HttpSessio ...
- Django之session验证的三种姿势
一.什么是session session是保存在服务端的键值对,Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中. 二.FVB中 ...
- 一级缓存、二级缓存、延迟加载、hibernate session 域 pojo三种状态
1.一级缓存(session缓存 ).二级缓存 意义:提高hibernate查询效率. 缺点:可能会因并发,产生数据不一致. 本质:基于session 的缓存,利用hiber ...
- ASP、JSP、PHP 三种技术比较
目前,最常用的三种动态网页语言有ASP(Active Server Pages),JSP(JavaServer Pages),PHP (Hypertext Preprocessor). 简 介 : A ...
随机推荐
- MCP 实践系列:股票分析
今天,我们介绍了一个通过 Financial Datasets 获取股票市场数据的接口.这个接口不仅支持其他 AI 助手通过 MCP 接口 直接检索关键的财务数据(如损益表.资产负债表.现金流量表), ...
- php伪随机数爆破
php伪随机数爆破 涉及到的函数为mt_rand() mt_rand(min, max) 返回min到max之间的伪随机数,如果参数缺省,则返回0到RAND_MAX之间的伪随机数. 不同于常规的伪随机 ...
- 一个使用 WPF 开发的 Diagram 画板工具(包含流程图FlowChart,思维导图MindEditor)
前言 今天大姚给大家分享一个使用 WPF 开发的 Diagram 画板工具(包含流程图FlowChart,思维导图MindEditor):AIStudio.Wpf.Diagram. 项目介绍 AISt ...
- 洛谷 P5066 [Ynoi2014] 人人本着正义之名debug-log
序言 此日志分为四部分. 00:00是开始打代码的时间. 最开始打完代码(没有debug)大约用了两小时. part1-20210323 02:30 生成新节点时,没有给随机权值. 02:41 upd ...
- ubuntu2204 ROS2安装
ubuntu初始环境配置ROS2 换源 备份原来的文件 sudo cp /etc/apt/sources.list /etc/apt/sources_init.list 换源 sudo gedit / ...
- Springboot笔记<5>静态资源访问
静态资源访问 静态资源目录 请求进来,先去找Controller看能不能处理.不能处理的所有请求又都交给静态资源处理器.静态资源也找不到则响应404页面.如果静态目录中存在a.png,访问localh ...
- OceanBase 中的非机动车道 —— SQL 限流技巧分享
首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 "老纪的技术唠嗑局",会持续更新和 OceanBase 相关的各种技术内容.欢迎感兴趣的朋友们关注! 定场诗< ...
- 三种熔断策略在数据服务API中的实践应用
熔断策略的概念最早可以追溯到电力系统中的保险丝.当电流过大时,保险丝会自动熔断,以防止电器设备因过载而损坏.这种简单而有效的保护机制为后来软件系统中的熔断策略提供了灵感.在软件系统中,熔断策略的工作原 ...
- 开源项目丨一文详解一站式大数据平台运维管家ChengYing如何部署Hadoop集群
课件获取:关注公众号"数栈研习社",后台私信 "ChengYing" 获得直播课件 视频回放:点击这里 ChengYing开源项目地址:github 丨 git ...
- UFT send request & get response
str 为发出去的request :