小程序 保持登录状态

问题

由于wx.request()发起的每次请求对于服务器来说都是不同的会话(wx.request()请求是先经过微信服务器再到达我们的服务器),这样会导致后续请求都相当于未登录的状态。

解决方案

将登陆时后端返回的session保存在本地,
然后将session存放在cookie中以请求头的方式带回给服务端

实现代码

1.请求登陆接口获取到header["Set-Cookie"],并储存

//app.js
App({
  onLaunch() {
    wx.login({ // 登录
      // 发送 res.code 到后台换取 openId, sessionKey, unionId
      success: res => {
        wx.request({
          url: 'api/login',
          method: 'POST',
          data: {
            code: res.code
          },
          success(res) {
            //必须先清除,否则res.header['Set-Cookie']会报错
            wx.removeStorageSync('sessionid') ;
            //储存res.header['Set-Cookie']
            wx.setStorageSync("sessionid", res.header["Set-Cookie"]) ;
          }
        });
      }
    });
  }
})

2.后续接口将储存的sessionid放在cookie中以请求头的方式带回给服务端

//index.js
Page({
  onLoad(options) {
    wx.request({
      url: api + '/list',
      method: 'GET',
      header: { //将sessionid放在cookie中以请求头的方式带回给服务端
        'cookie': wx.getStorageSync("sessionid")
      },
      success(res) {
        console.log(res);
      }
    })
  }
})

你可能感兴趣的:(小程序 保持登录状态)