> 在扫码登录中,redis主要用于设置二维码过期时间,并在不同阶段保存扫码的不同状态
扫码登录流程大概如下:
1. 生成二维码,二维码内容保存一个code,已code作为键,初始内容为{status:0,uid:0,portrait:''}
2. 手机扫描二维码,获得code;手机带上code和用户token请求服务端,服务端根据token查询用户信息,并保存到以code为键的缓存,状态设置为已扫描;{status:1,uid:1,portrait:'http://xxx.png'}
3. 游览器检测登录状态,每隔一秒轮询一次服务端,或者用websocket;如果此时已扫描,则轮询的接口会返回用户的头像到游览器的页面上
4. 手机确认登录,带上code和用户token请求服务端,服务端设置code状态为确认登录;{status:2,uid:1,portrait:'http://xxx.png'}
5. 客户端轮询到为确认状态,设置code状态为已登录,并自动执行登录;{status:3,uid:1,portrait:'http://xxx.png'}
6. 登录成功,清除缓存
status状态:
0 : 初始化
1 : 已扫描
2 : 确认登录
3 : 已登录
至于为什么登录时要设置一个已登录状态,是因为若游览器一秒请求一次服务端,此时服务端上一个请求登录过程超过1秒,还没登录完成时又来一个请求,设置为已登录的话,下一个请求只要看到为已登录状态则不处理直接忽略即可
- php
- 编译安装
- 基本概念
- 垃圾回收机制
- 生命周期
- zval底层实现
- c扩展开发
- gdb调试工具
- 自定义扩展简单demo
- 钩子函数
- 读取php.ini配置
- 数组
- 函数
- 类
- yaf扩展底层源码
- swoole扩展底层源码
- memoryGlobal内存池
- swoole协程使用记录
- 单点登录sso原理
- compser使用
- session实现机制
- c & linux
- gcc
- 指针
- 结构体,联合和位字段
- 宏定义井号说明
- printf家族函数和可变参数
- 共享函数
- 静态库和动态库
- makefile自动化构建
- 信号一
- 信号二
- inotify监控文件事件
- socket编程
- 简介
- UNIX DOMAIN
- Internet DOMAIN
- TCP/IP
- 文件IO多路复用
- 内存管理
- 进程组,会话和控制终端
- daemon守护进程
- 多进程
- 多线程
- 常用进制转换
- go
- 入门知识
- 字节和整数装换
- python
- redis
- 应用场景
- 消息队列
- 热点数据
- 扫码登录
- 订阅发布
- 次数限制
- 抢购超卖
- 持久化机制
- mysql
- 工作流程
- MyISAM和InnoDB区别
- 用户和权限管理
- 执行计划
- sql优化
- 事务和锁
- 慢查询日志
- case...when...then...end用法
- sql
- 参考
- linux
- 内核参数优化
- 防火墙设置
- docker
- docker入门知识
- 算法
- 多维数组合
- DFA算法
- 红包金额分配
