会话跟踪技术之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 ...
随机推荐
- 探索 Rust:从基础语法到实用概念
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- Qt 的一个大坑:visual studio中setStyleSheet不支持jpg
在代码中设置QWidget的背景图,一般会使用setStyleSeeht函数去设置样式表: border-image:("c:x.png"); 这里有个大坑:不支持jpg图片!
- frp实现内网穿透访问内网多台Linux服务器
本文主要记录笔者在使用frp实现内网穿透访问内网多台Linux服务器的全过程,包括公网服务器的配置.frp服务端.客户端的下载与配置,以及配置systmctl来实现系统级启停frp,并记录我遇到的一些 ...
- GPU开启持久化模式
GPU开启持久化模式 GPU驱动内存常驻模式,也称为GPU驱动持久模式.linux 系统下,在 persistence 模式是 enabled 状态时, GPU 驱动一直处于加载状态, 减少运行程序时 ...
- 指标+AI:迈向智能化,让指标应用更高效
近日,以"Data+AI,构建新质生产力"为主题的袋鼠云春季发布会圆满落幕,大会带来了一系列"+AI"的数字化产品与最新行业沉淀,旨在将数据与AI紧密结合,打破 ...
- 开源项目丨ChengYing 1.1版本重磅发布:新增超多功能,全新优化体验!
ChengYing是一站式全自动化全生命周期大数据平台运维管家,提供大数据产品的一站式部署.运维.监控服务,其可实现产品部署.产品升级.版本回滚.扩缩节点.日志诊断.集群监控.实时告警等功能,致力于最 ...
- FastAPI权限缓存:你的性能瓶颈是否藏在这只“看不见的手”里?
title: FastAPI权限缓存:你的性能瓶颈是否藏在这只"看不见的手"里? date: 2025/06/23 05:27:13 updated: 2025/06/23 05: ...
- webFlux入门
今天发现一个特别好的文章,是关于springBoot框架中响应式编程的,那下面就是这位博主所整理的一些干货 ---------------------------------------------- ...
- 3.Java Spring框架源码分析-AOP-AnnotationAwareAspectJAutoProxyCreator是在什么时候起作用的
目录 1. 继续研究BeanPostProcessor的postProcessBeforeInstantiation和postProcessAfterInitialization 2. 创建其他单实例 ...
- Java--连接池和分页
连接池 分析: 涉及频繁的连接的打开.关闭,影响程序的运行效率! 连接管理: 预先创建一组连接,有的时候每次取出一个: 用完后,放回: 学习连接池: a. 自定义一个连接池 b. 学习优秀的连接池组件 ...