本篇文章給大家帶來的內容是關於小程序和ThinkPHP5結合實現登錄狀態(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
微信小程序中,一般會涉及三種登錄方式: 
1. 使用微信賬號登錄 
2. 自有的賬號注冊和登錄 
3. 使用其他第三方平台賬號登錄
微信賬號登錄流程:
1. 小程序通過wx.login獲取code,發往后台,后台以此向微信API換取session_key和openid;
2. 隨機生成字符串作為sessionid(key),session_key和openid作為value,存入redis中,為了安全,
存入的時候還應設置一個超時的時間;
3. 客戶端將返回的sessionid存入storage,調用那些需要登錄后才有權限的訪問的后台服務時,
你可以將保存在storage中的sessionid取出並攜帶在請求中,后台代碼中獲取到該sessionid后,
從redis中查找是否有該sessionid存在,存在的話,即確認該session是有效的,
繼續后續的代碼執行,否則進行錯誤處理。
本文采用的是自由的賬號注冊和登錄,主要思路和流程如下:
 1. 進入小程序首先通過wx.login獲取code,通過后台接口發往后台,后台以此向微信API換取session_key和openid;
2. 判斷數據庫中有無該openid【唯一標識,需和賬號(手機號)綁定】,
-- 如果數據庫中沒有該openid(說明沒有該賬號):
判斷傳過來的手機號是否為空(登錄時會將手機號存到全局變量),如果不為空,則說明是剛登錄過的,然后綁定openid及openid_time(當前時間),
如果手機號也為空,說明沒登錄過,則返回登錄失敗信息,使客戶端跳轉登錄頁;
-- 如果數據庫中有該openid(說明數據庫中有相對應的手機號),
判斷openid_time距現在的時間是否大於4小時,如果大於,返回登錄失敗信息,使客戶端跳轉登錄頁;
如果小於,則更新openid_time為當前時間,然后返回登錄成功信息及手機號。
3. 登錄頁面:判斷數據庫中該手機號是否存在,如果存在,則更新openid_time為當前時間,如果不存在,則添加該手機號用戶。然后跳轉首頁執行wx.login方法,登錄成功,保持登陸狀態。
詳細流程:
步驟1:進入小程序首先通過wx.login獲取code,通過后台接口發往后台,后台以此向微信API換取session_key和openid;
|   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  |  
            
             
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  |  
          
步驟2:判斷數據庫中有無該openid【唯一標識,需和賬號(手機號)綁定】;
|   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64  |  
            
             
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  |  
          
步驟3:登錄頁面:登錄成功后,跳轉首頁執行wx.login方法,然后登錄成功,保持登陸狀態。
|   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  |  
            
             
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  |  
          
|   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  |  
            
             
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  |  
          
根據微信API獲取sessionkey 和 openid的方法
|   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  |  
            
             
 
 date_default_timezone_set('PRC'); 
             
 
 
 
 
 
 
 
 
 
  |  
          
