亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

小程序和ThinkPHP5結合實現登錄狀態(附代碼)

2020-03-22 18:05:02
字體:
來源:轉載
供稿:網友

本篇文章給大家帶來的內容是關于小程序和ThinkPHP5結合實現登錄狀態(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

html' target='_blank'>微信小程序中,一般會涉及三種登錄方式:
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;
var user_phone = app.globalData.user_phone;wx.login({ success: res = {  // 發送 res.code 到后臺換取 openId, sessionKey, unionId wx.request({ url: http://www.tphoutai.com/wx/index ,  data: { code: res.code, user_phone: user_phone, success: function (result) { var res = result.data; console.log(res);  if(res.sendsure == 0){ wx.reLaunch({ url: ../login/login , }else if(res.sendsure == 1){ wx.reLaunch({ url: ../index/index , })
步驟2:判斷數據庫中有無該openid【唯一標識,需和賬號(手機號)綁定】;
// 后臺代碼:public function index(Request $request){ $url = http://api.weixin.qq.com/sns/jscode2session  // 參數 $params[ appid ]= 小程序的appid  $params[ secret ]= 小程序的AppSecret  $params[ js_code ]= $request - param( code  $params[ grant_type ]= authorization_code  $user_phone= $request - param( user_phone  // 微信API返回的session_key 和 openid $arr = httpCurl($url, $params, POST  $arr = json_decode($arr,true);  // 判斷是否成功 if(isset($arr[ errcode ]) !empty($arr[ errcode ])){  return json([ code = 2 , message = $arr[ errmsg ], result = null]); $openid = $arr[ openid  $session_key = $arr[ session_key  // 從數據庫中查找是否有該openid $is_openid = Db::table( user_info )- where( openid ,$openid)- find();  // 如果openid存在,更新openid_time,返回登錄成功信息及手機號 if($is_openid){  // openid存在,先判斷openid_time,與現在的時間戳相比,如果相差大于4個小時,則則返回登錄失敗信息,使客戶端跳轉登錄頁,如果相差在四個小時之內,則更新openid_time,然后返回登錄成功信息及手機號; // 根據openid查詢到所在條數據 $data = Db::table( user_info )- where( openid ,$openid)- find();  // 計算openid_time與現在時間的差值 $time = time() - $data[ openid_time  $time = $time / 3600;  // 如果四個小時沒更新過,則登陸態消失,返回失敗,重新登錄 if($time 4){  return json([ sendsure = 0 , message = 登錄失敗 ,]); }else{  // 根據手機號更新openid時間 $update = Db::table( user_info )- where( openid , $openid)- update([ openid_time = time()]);  // 判斷是否更新成功 if($update){  return json([ sendsure = 1 , message = 登錄成功 , user_phone = $data[ user_phone ]]); }else{  return json([ sendsure = 0 , message = 登錄失敗  // openid不存在時 }else{  // dump($user_phone); // 如果openid不存在, 判斷手機號是否為空 if(isset($user_phone) !empty($user_phone)){  // 如果不為空,則說明是登錄過的,就從數據庫中找到手機號,然后綁定openid,+時間 // 登錄后,手機號不為空,則根據手機號更新openid和openid_time $update = Db::table( user_info ) - where( user_phone , $user_phone) - update([  openid = $openid,  openid_time = time(), ]);  if($update){  return json([ sendsure = 1 , message = 登錄成功 ,]); }else{  // 如果也為空,則返回登錄失敗信息,使客戶端跳轉登錄頁 return json([ sendsure = 0 , message = 讀取失敗 ,]); }
步驟3:登錄頁面:登錄成功后,跳轉首頁執行wx.login方法,然后登錄成功,保持登陸狀態。
// 前臺登錄 wx.request({ url: http://www.tphoutai.com/wx/login ,  data: { user_phone: user_phone success: function (result) { var res = result.data;  if (res.sendsure == 1){ app.globalData.user_phone = that.data.user_phone; wx.reLaunch({ url: ../loading/loading , })
// 后臺登錄方法 public function login(Request $request){ // 獲取到前臺傳輸的手機號 $user_phone = $request - param( user_phone  // 判斷數據庫中該手機號是否存在 $is_user_phone = Db::table( user_info )- where( user_phone ,$user_phone)- find();  if(isset($is_user_phone) !empty($is_user_phone)){  // 登錄時,數據庫中存在該手機號,則更新openid_time $update = Db::table( user_info ) - where( user_phone , $user_phone) - update([  openid_time = time(), ]);  if($update){  return json([ sendsure = 1 , message = 登錄成功 ,]); }else{  $data = [  user_phone = $user_phone,  pass = 12345  // 如果數據庫中不存在該手機號,則進行添加 Db::table( user_info )- insert($data); } return json([ sendsure = 1 , message = 登錄成功 ,]); }
根據微信API獲取sessionkey 和 openid的方法
function httpCurl($url, $params, $method = GET , $header = array(), $multi = false){ date_default_timezone_set( PRC  $opts = array( CURLOPT_TIMEOUT = 30, CURLOPT_RETURNTRANSFER = 1, CURLOPT_SSL_VERIFYPEER = false, CURLOPT_SSL_VERIFYHOST = false, CURLOPT_HTTPHEADER = $header, CURLOPT_COOKIESESSION = true, CURLOPT_FOLLOWLOCATION = 1, CURLOPT_COOKIE  = session_name(). = .session_id(), /* 根據請求類型設置特定參數 */ switch(strtoupper($method)){  case GET :  // $opts[CURLOPT_URL] = $url . ? . http_build_query($params); // 鏈接后拼接參數 非? $opts[CURLOPT_URL] = $url . ? . http_build_query($params); break; case POST : //判斷是否傳輸文件 $params = $multi ? $params : http_build_query($params); $opts[CURLOPT_URL] = $url; $opts[CURLOPT_POST] = 1; $opts[CURLOPT_POSTFIELDS] = $params; break; default: throw new Exception( 不支持的請求方式!  /* 初始化并執行curl請求 */ $ch = curl_init(); curl_setopt_array($ch, $opts);  $data = curl_exec($ch);  $error = curl_error($ch); curl_close($ch);  if($error) throw new Exception( 請求發生錯誤: . $error);  return $data; }

測試結果:
這里寫圖片描述

相關推薦:

thinkphp5中belongsToMany() 模塊名稱的命名問題解決

php中適配器模式的詳細解析(附代碼)

以上就是小程序和ThinkPHP5結合實現登錄狀態(附代碼)的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区四区福利| 日韩欧美在线中文字幕| 日本久久久久亚洲中字幕| 91精品成人久久| 欧美成人小视频| 国内精品400部情侣激情| 色婷婷**av毛片一区| 91高清免费视频| 欧美福利在线观看| 亚洲mm色国产网站| 亚洲欧美国产一区二区三区| 国产自产女人91一区在线观看| 欧美成年人网站| 日韩欧美有码在线| 亚洲精品美女网站| 黄色精品一区二区| 亚洲性日韩精品一区二区| 精品福利免费观看| 国内偷自视频区视频综合| 国产精品午夜一区二区欲梦| 日韩欧美国产高清91| 亚洲网站在线播放| 97视频网站入口| 亚洲午夜精品久久久久久久久久久久| 日韩av最新在线| 亚洲区一区二区| 久久久精品2019中文字幕神马| 91免费看片网站| 久久精品视频在线| 日韩免费在线看| 亚洲美女免费精品视频在线观看| 久99九色视频在线观看| 97视频在线看| 亚洲黄色在线观看| 欧美诱惑福利视频| 97国产精品视频人人做人人爱| 亚洲色图欧美制服丝袜另类第一页| 992tv在线成人免费观看| 亚洲xxxx在线| 一区二区三区亚洲| 91热精品视频| 国产精品久久久久久五月尺| 日韩精品在线私人| 国产午夜精品视频免费不卡69堂| 国产精品久久久久久久7电影| 亚洲人免费视频| 国产精品欧美久久久| 久久久久久久久久久网站| 国产精品欧美在线| 精品国产成人av| 亚洲一级黄色av| 97精品国产97久久久久久| 97视频国产在线| 精品高清美女精品国产区| 久久久久久高潮国产精品视| 国产亚洲欧美日韩美女| 日韩精品福利网站| 久久天堂av综合合色| 亚洲欧美日韩在线高清直播| 69**夜色精品国产69乱| 国产成人福利网站| 欧美孕妇孕交黑巨大网站| 中文字幕日韩精品在线观看| 亚洲欧美在线磁力| 国产精品成人一区| 亚洲综合在线做性| 久久久久免费视频| 91精品国产乱码久久久久久久久| 亚洲男人天堂网站| 亚州精品天堂中文字幕| 97免费视频在线| 粉嫩av一区二区三区免费野| 青草成人免费视频| 亚洲精品国产品国语在线| 国产精品久久久久9999| 欧美日韩精品在线视频| 国外日韩电影在线观看| 久久久久久一区二区三区| 国产精品美女www| 久久精品国产成人| 亚洲成人久久久| 国产福利成人在线| 亚洲日本欧美日韩高观看| 亚洲综合精品伊人久久| 日韩av在线不卡| 欧美一级片久久久久久久| 日韩性生活视频| 黑人欧美xxxx| 亚洲精品一区二区三区不| 亚洲精品第一国产综合精品| 国产激情视频一区| 精品福利在线观看| 日韩中文字幕精品| 91亚洲精品久久久| 怡红院精品视频| 国产成人精品久久| 热re91久久精品国99热蜜臀| 国产精品欧美激情在线播放| 亚洲丁香久久久| 久久久亚洲国产天美传媒修理工| 日韩毛片中文字幕| 国产精品福利久久久| 91精品久久久久久久久久入口| 精品香蕉在线观看视频一| 欧美激情一区二区三区在线视频观看| 中文国产亚洲喷潮| 国产成人欧美在线观看| 久久久这里只有精品视频| 日韩在线视频观看正片免费网站| 日韩中文字幕不卡视频| 国产精品直播网红| 久久人人爽人人爽人人片av高请| 久久久久久久影院| 国产精品综合不卡av| 日韩中文字幕免费视频| www.欧美视频| 精品久久久久久国产| 中文一区二区视频| 日本高清视频精品| 国产精品尤物福利片在线观看| 日本人成精品视频在线| 国产98色在线| 精品呦交小u女在线| 美女黄色丝袜一区| 久久69精品久久久久久国产越南| 一个人看的www久久| 欧美老少配视频| 中文字幕亚洲欧美| 亚洲尤物视频网| 亚洲护士老师的毛茸茸最新章节| 国产一区二区久久精品| yellow中文字幕久久| 日韩女优人人人人射在线视频| 97视频免费观看| 国产精品一区二区三区免费视频| 亚洲欧美日韩精品久久亚洲区| 92国产精品视频| 日韩天堂在线视频| 韩国欧美亚洲国产| 国产精品视频专区| 亚洲欧美日韩精品| 国产一区二区丝袜高跟鞋图片| 91情侣偷在线精品国产| 久久久噜噜噜久久中文字免| 国产在线98福利播放视频| 亚洲无线码在线一区观看| 91超碰中文字幕久久精品| 成人乱色短篇合集| 亚洲精品一区av在线播放| 欧美日韩亚洲精品内裤| 97久久精品人搡人人玩| 91久久精品美女高潮| 91精品综合久久久久久五月天| 啊v视频在线一区二区三区| 成人免费视频在线观看超级碰| 亚洲高清免费观看高清完整版| 久久亚洲精品一区| 国产精品一二三视频| 国产亚洲日本欧美韩国| 国产精品免费小视频| 一区国产精品视频| 亚洲国产精品久久91精品| 欧美日韩中文字幕在线视频| 亚洲国产日韩欧美在线图片|