惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Project Zero
Project Zero
Security Archives - TechRepublic
Security Archives - TechRepublic
C
Cyber Attacks, Cyber Crime and Cyber Security
Security Latest
Security Latest
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
S
Schneier on Security
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
Intezer
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
F
Full Disclosure
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
Hacker News: Ask HN
Hacker News: Ask HN
G
Google Developers Blog
H
Heimdal Security Blog
O
OpenAI News
Hugging Face - Blog
Hugging Face - Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LangChain Blog
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
IT之家
IT之家
Cyberwarzone
Cyberwarzone
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Know Your Adversary
Know Your Adversary
博客园 - 聂微东
The Cloudflare Blog
C
Check Point Blog
K
Kaspersky official blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
月光博客
月光博客
T
Tor Project blog
T
Threat Research - Cisco Blogs
T
Tailwind CSS Blog
P
Proofpoint News Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
A
About on SuperTechFans
小众软件
小众软件
Cloudbric
Cloudbric
A
Arctic Wolf

博客园 - 锐洋智能

windows 下 降级迁移 Redis 8.8.0(源) → Redis 8.6.3(目标) Eclipse IDE for Enterprise Find/Replace 窗口可以"停驻" 安装 SDelete 方式 SDelete 的核心作用,不是 “删文件”,而是 “把你已经删掉的文件,彻底从磁盘上抹干净”,同时帮你把虚拟机里的 “空闲空间” 变成连续的、可被回收的状态。 windows 10 启动就运行了一个批处理文件 在什么地方修改?启动项中? 让 Spring Framework7.0.7 支持 velocity Java 9+ 开启了模块化安全限制,不允许 Ignite 直接访问底层内存地址,导致 Ignite 启动失败 Spring 5.x + 老项目的 JWT 拦截器 + 自动续期 下是针对 RedisSessionManager 的 Tomcat context.xml 配置示例,覆盖基础单机 Redis、带密码 / 指定库、Redis 哨兵集群、自定义序列化 / 持久化策略 等常见场景 Redis-8.6.3-Windows-x64-cygwin 与 Redis-8.6.3-Windows-x64-msys2 有什么不一样? commons-fileupload2 M4 升级 M5 报错解决方案 阿里云的网络安全策略 ip 地址详细说明 Paralithic、 QLExpress、AviatorScript、exp4j 性能对比一下 java 序列化影响(重要!) paralithic 与 Aviator 表达式那一个更快 券商接受委托的完整时间线 jQuery 4.0 移除了许多已废弃的方法和特性 xheditor插件无限递归错误解决方法 jedis-7.1.0.jar 升级至 jedis-7.2.0.jar 就提示:The type JedisPoolConfig is deprecated The type JedisPooled is deprecated Spring 从 5.x 到 6.x 和 7.x 区别 js 原生 剪切板 复制功能 安装 Microsoft Visual C++ 运行时 Java与Python进程通信优化方案 Autocomplete | jQuery UI 同一面页定义不同的 .ui-autocomplete Quartz的misfire处理策略设置不当导致Job在应用启动时立即执行。 mysql-connector-j-9.5.0.jar BUG 推荐几款好用的CSS在线压缩工具 CSS 变量 定义及引用 TLS virtual host [_default_], certificate type [RSA] configured from keystore [d:/reyo/jks/localhost.jks] using alias [tomcat] with trust store [null] okhttp5.x 需要在 请求级别 控制是否使用重试拦截器,而不是在客户端级别 Apache Commons FileUpload 1.x 与 2.x 的主要区别
接口鉴权:Session/Cookie 与 JWT 的核心区别
锐洋智能 · 2026-05-27 · via 博客园 - 锐洋智能

接口鉴权:Session/Cookie 与 JWT 的核心区别

你说的非常对:传统 Web 项目用 Session/Cookie,前后端分离的接口项目(RESTful API)必须用 JWT,核心原因是架构变了—— 传统是服务端渲染页面,现在是前端独立、接口无状态


一、先搞懂:为什么传统接口不能用 Session?

1. Session 的工作原理(有状态)

  1. 浏览器登录 → 服务端生成 Session 存在内存 / 数据库
  2. 服务端返回一个 SessionID 存在Cookie
  3. 下次请求 → 浏览器自动带 Cookie → 服务端查 Session 确认身份

2. Session 致命缺点(不适合接口)

  • 强依赖 Cookie:跨域、小程序、App、第三方调用都受限
  • 服务端必须存状态:分布式 / 多服务器要做 Session 共享(Redis 同步)
  • 前后端分离不友好:前端是纯客户端,不依赖浏览器自动带 Cookie

所以:接口鉴权必须抛弃 “服务端存状态” 的方案 → JWT 应运而生


二、JWT 是什么?(无状态)

JWT = JSON Web Token

一句话:把用户身份信息加密成一串字符串,存在客户端,服务端不存任何登录状态

  1. 登录成功 → 服务端用密钥签发 JWT(不存任何数据)
  2. 前端把 JWT 存在本地(localStorage / 小程序缓存)
  3. 每次请求接口 → 前端手动把 JWT 放在请求头里
  4. 服务端只用密钥验证 JWT 是否合法,不用查库

三、Session / Cookie 与 JWT 的核心区别(一张表看懂)

对比维度Session / CookieJWT
存储位置 服务端存储,客户端只存 ID 全部存在客户端,服务端零存储
状态 有状态(服务端要查会话) 无状态(Stateless,接口天然支持分布式)
跨域 / 跨端 差(依赖 Cookie,跨域限制大) 极强(支持 Web、小程序、App、第三方接口)
分布式部署 麻烦(需要 Session 共享) 极简单(多台服务器直接用同一密钥验证)
请求方式 浏览器自动带 Cookie 前端手动传(请求头 / 参数)
安全特点 易受 CSRF 攻击 无 CSRF 风险
适用场景 传统网站、服务端渲染 前后端分离、RESTful API、微服务

四、最关键的 3 个本质区别

1. 有无状态(最核心)

  • Session:服务端必须记住你登录了(有状态)
  • JWT:服务端不记得任何人,只认令牌(无状态) → 接口架构必须无状态,所以 JWT 是标准

2. 数据存在哪里

  • Session:存在服务器
  • JWT:存在客户端自己手里

3. 扩展性

  • Session:服务器越多越麻烦
  • JWT:随便加服务器,完全不用改代码

五、简单总结:为什么接口要用 JWT?

  1. 不依赖 Cookie,跨域、小程序、App 全支持
  2. 服务端不存登录状态,分布式 / 集群随便扩
  3. 标准通用,所有前后端分离架构都用它
  4. 安全可控,可设置过期、可加密、可防篡改

总结

  • Session/Cookie:适合传统网站,服务端存状态,依赖浏览器
  • JWT:适合接口鉴权,无状态、跨端、分布式友好

你可以简单记:

网站用 Session,接口用 JWT;有状态用 Session,无状态用 JWT。

<!-- JWT 工具:jjwt,Spring5 兼容 -->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.5</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.5</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.5</version>
    <scope>runtime</scope>
</dependency>