慣性聚合 高效追讀感興趣之博客、新聞、科技資訊
閱原文 以慣性聚合開啟

推薦訂閱源

小众软件
小众软件
博客园 - 叶小钗
有赞技术团队
有赞技术团队
大猫的无限游戏
大猫的无限游戏
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
T
Tailwind CSS Blog
Jina AI
Jina AI
量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
J
Java Code Geeks
V
Visual Studio Blog
月光博客
月光博客

博客园 - 锐洋智能

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 的主要区别
接口验权:会话/饼干与 JWT 之要异
锐洋智能 · 2026-05-27 · via 博客园 - 锐洋智能

接口鉴权:会话/饼干与 JWT 之要异

汝所言甚是。古之 Web 事,以 Session/Cookie 相协。今之前后端分治,以 RESTful API 互应者,必以 JWT 为凭。,其本在构架易矣—— 传习也服务器端渲染页面,今为前端独立,接口无状

吾以至简至要之道,明二者之别。


一、首明其理:何故旧式接口难施会话?

一、会话之理(有状)

  1. 浏览器登入 → 服务器生会话存于内存 / 库中
  2. 服务器返一SessionID存于Cookie
  3. 次请 → 浏览器自带Cookie → 服务器查会话认身份

二、会话之弊(不适接口)

  • 强依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,接口自适分布)
跨域/跨端,__JHSNS_SEG_bb0c4180_58__(赖于 Cookie,跨域限重) 极强(支 Web、小程序、App、第三方接口)
分布式部署,__JHSNS_SEG_bb0c4180_62__(需会话共通)烦。 至简也(众服务器共钥验之)
请法 瀏覽器自帶 Cookie 前段手傳之(請頭/參數)
安險之特 易為 CSRF 所乘 無 CSRF 之患
適用之境 傳統之網站、服務端呈現 前後端分離、RESTful API、微服務

四、至要之別三條

有無之辨(至要)

  • 會話:服務端必須記憶君之登入(有狀態)
  • JWT:服務端不記憶任何人,唯認令牌(無狀態) → 接口之構,必須無狀態,故JWT為標準

2. 資料存於何處

  • 會話:存於服務器
  • JWT:存於客戶端己之手中

3. 廣展之性

  • 會話:服務器愈多,愈為煩雜
  • 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>