1. 核心定义:它们是谁?
-
JWT (JSON Web Token) :是一种数据格式。它像是一张"电子身份证",内部加密保存了用户 ID、姓名、过期时间等信息。它解决的是**"信息如何安全存储和校验"**的问题。
-
Cookie :是一种传输与存储机制。它是浏览器的一个"小抽屉",也是 HTTP 协议的一个 Header。它解决的是**"信息如何在浏览器和服务器之间自动搬运"**的问题。
2. 关系总结:信件与信封
在你的项目中,两者的关系可以总结为:JWT 是信件,Cookie 是信封。
-
不结合时 :JWT 通常放在 Header 的
Authorization字段里,需要前端手动写代码去塞。 -
结合后 :后端把 JWT 塞进 Cookie。浏览器在每次请求时,会自动把 Cookie 里的 JWT 带给后端,无需前端干预。
3. 关键差异对比
面试官最喜欢问:既然有了 Session 模式的 Cookie,为什么还要用 JWT 模式的 Cookie?
| 维度 | 传统 Session + Cookie | JWT + Cookie (你的项目) |
|---|---|---|
| 存储位置 | 服务器(内存/数据库/Redis) | 客户端(存放在浏览器中) |
| 状态性质 | 有状态。后端必须存一份 Session 才能识别你是谁。 | 无状态。后端不存任何数据,解密 JWT 字符串即知身份。 |
| 扩展性 | 较差。多台服务器需要做 Session 共享。 | 极好。任何一台服务器只要有密钥就能解密。 |
| 安全性 | 容易受到 CSRF 攻击。(跨站请求伪造) | 同样面临 CSRF,但配合 HttpOnly 极大提升安全性。 |
4. 为什么要配合 HttpOnly?(面试必杀技)
这是你简历中的亮点。你必须告诉面试官:
-
默认 Cookie 是不安全的,JavaScript 可以直接读取它。
-
HttpOnly Cookie:一旦设置,JavaScript 脚本无法访问此 Cookie。这使得即便网站存在 XSS 漏洞,黑客也拿不到你的 JWT。
5. 你的项目闭环(话术参考)
"在我的《中国街健网》项目中,我采用了 JWT + HttpOnly Cookie 的方案。后端生成 JWT 令牌后通过响应头下发给浏览器,利用 Cookie 的自动携带特性简化了前端开发;同时,通过 JWT 的无状态特性降低了服务器的存储压力。通过设置 HttpOnly 标志,有效防御了 XSS 攻击对身份令牌的窃取。"
💡 总结一句话
JWT 负责"内容自包含且防篡改",Cookie 负责"在浏览器端自动且安全地传递"。
秦同学,这套总结涵盖了面试中 80% 的认证相关问题。既然总结好了,我们要不要聊聊你的 Linux 服务器 118.89.123.57 上,是如何配置 Nginx 来处理这些 Cookie 和跨域问题的?