登录业务的重新梳理(用PHP做示例)

最近有个老项目为了过三级等保需要修改一些登录的逻辑,对代码重新进行梳理修改完成后,对登录的业务流程进行重新梳理


用户在完成登录操作以后,系统需要下发标识记录一下用户的登录信息。在之前非前后端分离的项目中,登录标识都是存储在服务器的session中的。当前的会话只要是session中存在标识,那么后续的访问都可以在session中直接获取到登录信息。但是随着技术的迭代与业务场景的复杂化,很多项目都变成了前后端分离的形式。后端下发token给前端以后,前端根据token去请求合法的数据。

相比于之前的session的存储标识的简单方式,这种复杂的前后端分离项目我们作为后端工程师需要如何去设计呢?

首先需要考虑的是登录所需要的业务场景

  • 登录成功下发token
  • 退出登录清除&&失效掉token
  • 超时无操作使token失效
  • 有操作时候刷新token
  • 同一个账号只允许单点或者多点登录
  • 冻结/禁用账号时候,踢掉当前已登录的账号
  • 。。。更多的实际情况

哈哈,我刚搞php的时候。只会扔个标识完事儿。现在做了一些项目了。开始搞这些业务的时候也了解这些业务可能会涉及到的场景,这些场景是需要在前期设计时候就设计好的,否则后期要修改可费劲了。

具体的场景分析

1 登录成功下发token

目前主流的基本都是 用jwt的方式去实现了。jwt提供了一套加解密的方案。把用户信息加密以后生成一个唯一标识,生成的token标识存储在redis中。

bash 复制代码
composer require firebase/php-jwt

2 退出登录清除&&失效掉token 登录下发的token是存储在redis中,只要用得到的token算出redis中存储的键干掉即可。

3 超时无操作使token失效 这个可以在存储redis数据时候设置好当前数据的过期时间。到期以后当前token就会失效掉。

4 有操作时候刷新token 这个是需要有正常访问的时候,重置掉redis中的那个过期时间。

5 同一个账号只允许单点或者多点登录 多点的情况不需要处理,但是假设是单点登录的情况。那么就需要记录下当前账号下发过的所有token。这就是令牌桶的一个概念。

6 冻结/禁用账号时候,踢掉当前已登录的账号 上面有了同一个账号所有的令牌的一个桶。踢掉的时候把当前账号所有的token全部干掉即可。

以上是对于登录逻辑的一些整理。

相关推荐
最贪吃的虎6 分钟前
MySQL调优 一:慢SQL日志
运维·数据库·后端·mysql
武子康17 分钟前
大数据-192 DataX 3.0 架构与实战:Reader/Writer 插件模型、Job/TaskGroup 调度、speed/errorLimit 配置速
大数据·分布式·后端
用户94468140135019 分钟前
JUC 小试牛刀:从源码分析「ArrayBlockingQueue」,Java自带的线程安全的、有界的阻塞队列
java·后端
李广坤21 分钟前
Rust常用集合
后端
总会落叶25 分钟前
Spring AOP 面向切面编程完全指南 🚀
后端
Moment29 分钟前
到底选 Nuxt 还是 Next.js?SEO 真的有那么大差距吗 🫠🫠🫠
前端·javascript·后端
大梦谁先觉i30 分钟前
Spring 实现 3 种异步流式接口,干掉接口超时烦恼
java·后端·spring
青梅主码32 分钟前
SimilarWeb最新发布《全球电商行业报告2025》:美国、英国、日本等成熟经济体的电商市场已显现饱和迹象,访问量趋于下降
后端
李广坤33 分钟前
Rust所有权、枚举和模式匹配
后端