问题:由于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) } }) } }微信小程序













