当前位置: 首页 > article >正文

登录逻辑结合redis

1. 用户登录
  • 用户访问登录页面,输入用户名和密码,提交表单。

  • 服务端验证用户名和密码:

    • 如果验证成功,生成 ticket,并将 ticket 和用户 ID 存储在缓存中(如 Redis)。

    • 将 ticket 放入 Cookie 中,设置 Cookie 的有效期(如 7 天)。

    • 返回响应给浏览器,浏览器存储 Cookie

2. 浏览器存储 Cookie
  • 浏览器收到响应后,将 Cookie 存储在本地。

  • 下次访问时,浏览器会自动将 Cookie 附加到请求头中,发送给服务端。

3. 拦截器处理请求
  • 拦截器从请求的 Cookie 中提取 ticket

    • 如果 ticket 不存在或无效,跳转到登录页面。

    • 如果 ticket 有效,从缓存中查询对应的用户 ID。

    • 通过用户 ID 查询用户信息(如用户名、头像等)。

    • 将用户信息放入 Model 中。

4. 模板引擎渲染 HTML
  • 模板引擎根据 Model 中的数据,动态生成 HTML 页面。

  • 例如,如果 Model 中包含用户信息,模板引擎会生成类似以下的 HTML:

    html

    复制

    <div>欢迎,{{username}}</div>

    运行 HTML

5. 返回 HTML 给浏览器
  • 服务端将渲染后的 HTML 页面返回给浏览器。

  • 浏览器解析 HTML 并显示内容。

6. 浏览器显示用户信息
  • 如果用户已登录,页面会显示用户的登录信息(如“欢迎,用户名”)。

  • 如果用户未登录,页面会显示登录链

3. Cookie 和 Session 的区别

特性CookieSession
存储位置客户端(浏览器)服务器端
数据安全性较低(数据存储在客户端,可能被篡改或窃取)较高(数据存储在服务器端,客户端只保存 ID)
存储大小较小(通常不超过 4KB)较大(受服务器内存或存储限制)
性能影响无(数据存储在客户端)有(数据存储在服务器端,可能占用资源)
生命周期可设置有效期(浏览器关闭后仍可保留)通常随浏览器关闭或超时失效
适用场景存储少量非敏感数据(如用户偏好设置)存储敏感数据(如用户登录状态)

4. 为什么选择 Cookie 或 Token 而不是 Session

(1)分布式系统的需求
  • 现代应用通常是分布式的,用户的请求可能被分发到不同的服务器。

  • 使用 Session 需要在多个服务器之间共享数据,而 Cookie 或 Token 是无状态的,更适合分布式系统。

(2)性能优化
  • Session 需要频繁访问数据库或缓存,而 Cookie 或 Token 只需验证其有效性,性能更高。

(3)简化架构
  • 使用 Cookie 或 Token 可以避免引入复杂的 Session 管理机制(如分布式缓存),简化系统架构。

(4)安全性
  • Cookie 可以通过 HttpOnly 和 Secure 标志增强安全性。

  • Token(如 JWT)可以通过签名和加密保证数据的完整性和安全性。

使⽤Redis存储验证码 当⽤户点击刷新验证码时,服务端⾸先给当前需要登陆的游客,设置⼀个随机字符串(kaptchaOwner),⽤于标识 当前这个游客,然后将随机字符串存⼊到cookie中,返回给浏览器,然后服务端的redis保存 key:随机字符串, value:验证码 。 接着⽤户输⼊⽤户名,密码,验证码,再次点击登陆时,服务端会从cookie中拿到kaptchaOwner,通过它,可以从 Redis中得到正确的验证码,然后与⽤户输⼊的验证码做⽐较,看是否⼀致。


http://www.kler.cn/a/562888.html

相关文章:

  • 【Linux】vim 设置
  • Selenium 与 Coze 集成
  • 【AI+智造】基于DeepSeek的船舶海工设备多维度数据分析技术方案——以南通船舶制造企业为例
  • Element Plus: el-card的内容滚动问题
  • 钉钉MAKE AI生态大会思考
  • 一文讲解Redis中热点Key的重建、可能会发生的问题及解决方案
  • JVM 简单内存结构及例子
  • 前端(vue)学习笔记(CLASS 2):进阶
  • Rk3568驱动开发_点亮led灯(手动挡)_5
  • 认证与授权#1#Token和Cookie验证方式对比
  • 学习Java数组操作:从基础到高级技巧详解
  • 【算法工程】大模型局限性新发现之解决能连github但无法clone项目的问题
  • Java 设计模式 面试题及答案整理,最新面试题
  • 深度学习-133-LangGraph之应用实例(二)使用面向过程和面向对象的两种编程方式构建带记忆的聊天机器人
  • AcWing 蓝桥杯集训·每日一题2025·密接牛追踪2
  • 正则化技术
  • 【React】合成事件原理
  • 力扣hot100刷题——11~20
  • 计算机主板南桥与北桥核心架构概论
  • 百度AI:起个大早,赶个晚集?