微信小程序保持session會(huì)話的方法
一般我們web網(wǎng)站都會(huì)有cookie來(lái)保存session ID,將用戶和服務(wù)器保持在一次會(huì)話中,但是很遺憾,微信小程序不支持cookie,他的每一次請(qǐng)求就是一次會(huì)話,這樣就會(huì)產(chǎn)生一個(gè)問(wèn)題,每次請(qǐng)求都需要確定當(dāng)前的用戶是誰(shuí),但是我們又不能在每次請(qǐng)求的數(shù)據(jù)中攜帶用戶的信息,這樣是不安全的。今天就介紹兩種方式來(lái)實(shí)現(xiàn)保持會(huì)話。
第一種:客戶端保存session ID
1、通過(guò)wx.login接口獲取 code,將code傳遞到后臺(tái)(一般后臺(tái)都有shiro或者Spring security這種過(guò)濾器,該方法作為第一個(gè)啟動(dòng)方法需要后臺(tái)放過(guò)),后臺(tái)通過(guò)code訪問(wèn)微信接口,返回當(dāng)前登陸的微信信息。
2、后臺(tái)通過(guò)微信的openID去數(shù)據(jù)庫(kù)的微信信息表中查詢?cè)撐⑿盘?hào)是否與后臺(tái)用戶綁定過(guò),如果綁定過(guò),將該用戶信息放入session中,并返回已綁定標(biāo)記,為綁定過(guò),返回為綁定標(biāo)記。并且將會(huì)話ID返回。
3、小程序拿到sessionID和是否綁定標(biāo)記,將session ID存入緩存中或者在app.js中定一個(gè)全局變量用來(lái)存儲(chǔ)。如果未綁定,跳轉(zhuǎn)到綁定頁(yè)面,如果綁定,去往首頁(yè)。
4、因?yàn)楹笈_(tái)的session都有過(guò)期時(shí)間,默認(rèn)是半個(gè)小時(shí),所以說(shuō)為了確保小程序端的session ID不會(huì)過(guò)期,我們需要在他過(guò)期之前刷新sessionID。
我們每過(guò)二十分鐘刷新一次,也就是重新請(qǐng)求一次。
將該函數(shù)放到app.js的生命周期函數(shù)中,這樣一旦打開(kāi)小程序就會(huì)執(zhí)行
5、每次請(qǐng)求需要將sessionID放入cookie中,并將它設(shè)置頭request header中
第二種:小程序保持唯一標(biāo)識(shí)uuid(如果后臺(tái)過(guò)濾器需要登陸驗(yàn)證的話,小程序端的請(qǐng)求接口都需要放行),這個(gè)就不貼代碼了,基本和上面邏輯差不多,只不過(guò)這次存的是uuid。
1、小程序請(qǐng)求微信,拿到code,請(qǐng)求后臺(tái)并傳遞code
2、后臺(tái)根據(jù)code請(qǐng)求微信,拿到openID
3、后臺(tái)根據(jù)openID去微信信息表查詢?cè)搊penID是否綁定用戶,綁定了,返回一個(gè)唯一表示uuid以及綁定標(biāo)識(shí),沒(méi)有綁定,創(chuàng)建一個(gè)uuid以及未綁定標(biāo)識(shí)返回給小程序
4、小程序判斷未綁定,跳轉(zhuǎn)到綁定頁(yè)面,根據(jù)輸入信息+uuid返回給后臺(tái)綁定用戶,后臺(tái)返回是否綁定成功
5、根據(jù)綁定是否成功,小程序操作
小程序只保存uuid(相當(dāng)于accesstoken),這個(gè)uuid是小程序與后臺(tái)連接的橋。
注意:這兩種方法都是不安全的,試想一下如果sessionID被劫持到了,并且還處于當(dāng)前會(huì)話中,黑客完全可以通過(guò)該session ID惡意獲取后臺(tái)數(shù)據(jù)(類(lèi)似CSRF攻擊)。uuid的話,因?yàn)檫@種請(qǐng)求被后臺(tái)過(guò)濾器放過(guò),所以完全可以直接請(qǐng)求后臺(tái)數(shù)據(jù)了。
到此這篇關(guān)于微信小程序保持session會(huì)話的方法的文章就介紹到這了,更多相關(guān)小程序保持session會(huì)話內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
老生常談javascript中邏輯運(yùn)算符&&和||的返回值問(wèn)題
下面小編就為大家?guī)?lái)一篇老生常談javascript中邏輯運(yùn)算符&&和||的返回值問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04JavaScript利用crypto模塊實(shí)現(xiàn)加解密
crypto模塊提供了加密功能,包含對(duì) OpenSSL 的哈希、HMAC、加密、解密、簽名、以及驗(yàn)證功能的一整套封裝。本文將利用它實(shí)現(xiàn)加解密算法,需要的可以參考一下2023-02-02JS實(shí)現(xiàn)頁(yè)面加載完成之后自動(dòng)刷新一次問(wèn)題
這篇文章主要介紹了JS實(shí)現(xiàn)頁(yè)面加載完成之后自動(dòng)刷新一次問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02C#程序員入門(mén)學(xué)習(xí)微信小程序的筆記
這篇文章主要給大家分享了一位C#程序員入門(mén)學(xué)習(xí)微信小程序的筆記,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03JavaScript移動(dòng)端常用事件之touch觸摸事件詳解
觸屏事件touch也稱(chēng)為觸摸事件,touch對(duì)象代表一個(gè)觸摸點(diǎn),觸摸點(diǎn)可能是一根手指,也可能是一根觸摸筆,觸屏事件可響應(yīng)用戶手指(或觸摸筆)對(duì)屏幕或者觸控板操作,下面這篇文章主要給大家介紹了關(guān)于JavaScript移動(dòng)端常用事件之touch觸摸事件的相關(guān)資料,需要的朋友可以參考下2022-10-10JavaScript 引用類(lèi)型實(shí)例詳解【數(shù)組、對(duì)象、嚴(yán)格模式等】
這篇文章主要介紹了JavaScript 引用類(lèi)型,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript 數(shù)組、對(duì)象、嚴(yán)格模式引用類(lèi)型相關(guān)概念、原理及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05JS自定義對(duì)象創(chuàng)建與簡(jiǎn)單使用方法示例
這篇文章主要介紹了JS自定義對(duì)象創(chuàng)建與簡(jiǎn)單使用方法,結(jié)合實(shí)例形式分析了JavaScript創(chuàng)建與使用自定義對(duì)象的相關(guān)操作技巧,需要的朋友可以參考下2020-01-01基于BootStrap Metronic開(kāi)發(fā)框架經(jīng)驗(yàn)小結(jié)【三】下拉列表Select2插件的使用
本文主要給大家介紹在編輯頁(yè)面中常用到的控件Select2,這個(gè)控件可以更加豐富傳統(tǒng)的Select下拉列表控件,提供更多的功能和更好的用戶體驗(yàn),2016-05-05