> 在掃碼登錄中,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算法
- 紅包金額分配