基于 session 的登录认证方式,基于 token 的登录认证方式,对比

基于 session 的登录认证方式,基于 token 的登录认证方式,对比

一、我的理解

  • 基于 session 的登录认证:
    • 1、客户端输入账号密码。
    • 2、服务端认证通过,创建 session 并把用户登录信息放进去,存储在 Redis 中,响应 key 给客户端。
    • 3、客户端把 key 保存到浏览器的 Cookie 中。
    • 4、后续请求携带 Cookie,服务端从 Cookie 中取出 key,去 Redis 中获取用户登录信息。
  • 基于 token 的登录认证:
    • 1、客户端输入账号密码。
    • 2、服务端认证通过,创建 token,token 使用 JWT 格式,返回给客户端,服务端不存储用户登录信息。
    • 3、客户端把 token 存储到 LocalStorage 中。
    • 4、后续请求携带 token,服务端认证 token,从 token 中获取到用户登录信息。

二、AI 分析

你总结得非常清晰和准确!这两种登录认证方式的核心流程你都已经完全抓住了。为了让你的理解更完善,我结合一些细节和补充点,帮你把这两个方案梳理得更透彻。

📝 基于 Session 的登录认证

你的总结基本无懈可击。这里有几个小细节可以补充:

  • Cookie 的自动机制 :在第3、4步中,浏览器会自动处理 Cookie。一旦服务端通过 Set-Cookie 头将 Session ID 返回给客户端,浏览器就会将其保存。在后续的每次请求中,只要域名和路径匹配,浏览器都会自动把这个 Cookie(包含 Session ID)添加到请求头中,无需前端手动干预。
  • Session 的存储:你提到将 Session 存储在 Redis 中,这非常关键。在单机环境下,Session 可以存在内存里,但在生产环境的分布式系统中,必须使用 Redis 这样的集中式存储来实现 Session 共享,否则用户的请求如果负载均衡到另一台服务器,就无法找到对应的 Session 信息了。

🔑 基于 Token 的登录认证

你的理解也很到位。关于 Token 认证,特别是 JWT,可以再明确两点:

  • Token 的存储 :你提到客户端将 Token 存储在 LocalStorage 中,这确实是常见做法。不过,Token 也可以存储在 Cookie 中。选择哪种方式主要取决于安全策略的权衡(例如,使用 Cookie 可以利用 HttpOnlySameSite 属性来防范 XSS 或 CSRF 攻击)。
  • 服务端状态:你准确地指出了服务端不存储用户登录信息,这使得 Token 认证是"无状态"的。这意味着服务器无需为每个用户维护会话状态,使其天然支持分布式系统,扩展性更好。不过,这也带来了一个挑战:服务端无法在 Token 过期前主动使其失效(例如用户主动注销时,通常只能将 Token 加入黑名单或依赖较短的过期时间)。

📊 两种方案的核心区别

为了帮你更直观地对比,我整理了一个表格:

特性 基于 Session 基于 Token (如 JWT)
存储位置 Session 数据在服务端(如 Redis),客户端只存 Session ID Token 数据完全在客户端(如 LocalStorage)
服务端状态 有状态:服务端需存储和管理 Session 数据 无状态:服务端不存储会话状态
扩展性 较差,分布式环境下需额外处理 Session 共享 极佳,天然支持分布式和水平扩展
跨域支持 较弱,主要依赖 Cookie,受同源策略限制 较好,Token 可通过请求头轻松实现跨域携带

总的来说,你的理解已经非常到位了,以上补充只是为了让知识体系更完整。

相关推荐
优橙教育12 分钟前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
腻害兔2 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel2 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影2 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code3 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121313 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
CRMEB系统商城4 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience5 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao6 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具