微信小程式 保持登入狀態(自己服務端的session)的解決方案(java)
阿新 • • 發佈:2019-01-04
問題:由於wx.request()發起的每次請求對於伺服器來說都是不同的會話(wx.request()請求是先經過微信伺服器再到達我們的伺服器),這樣導致後續請求都相當於未登入的狀態。
解決方案:
session資訊存放在cookie中以請求頭的方式帶回給服務端
JSESSIONID=***;
小程式有提供對請求頭的支援
流程:
1、在使用者登入時,伺服器將會話sessionId返回到客戶端(小程式)
HttpSession session = request.getSession();
Sting sessionId = session.getId();
2、小程式儲存session到storage(全域性變數app.js),在之後的每一次請求中都攜帶請求頭sessionId
/*儲存到storage*/ wx.setStorage({ key: 'sessionId', data: 'JSESSIONID='+res.data.sessionId, success: function (res) { console.log(res) } }) /*儲存到app.js*/ App({ onLaunch: function () { }, globalData: { header: { 'Cookie': 'JSESSION=***' } } }) getApp().globalData.header.Cookie = 'JSESSIONID=' + sessionId;/*服務端返回的訊息*/
請求中帶上請求頭:sessionId
var header = getApp().globalData.header; //獲取app.js中的請求頭 wx.request({ url: "****", header: header, //請求時帶上這個請求頭 success:function(res){ } }) //獲取storage中的請求頭 getCheckLoginFlag:function(){ var loginFlag = wx.getStorageSync('loginFlag') var sessionId = wx.getStorageSync('sessionId') if (typeof (loginFlag)!="undefined"){ wx.request({ url: '***', data: { loginFlag: loginFlag }, header: { 'content-type': 'application/json', 'Cookie': sessionId }, success: function (res) { console.log(res) } }) } }