1. 程式人生 > >微信小程式 保持登入狀態(自己服務端的session)的解決方案(java)

微信小程式 保持登入狀態(自己服務端的session)的解決方案(java)

問題:由於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)
        }
      })
    }
  }