小程序request请求PHP服务器session失效的解决,header头部加cookie

经过各种百度查询,总算摸索出来了,跟php的小伙伴们分享下:
app.js:

//登录流程
    //获取openid 等信息并存储数据
    wx.login({
      success: function (res) {
        if (res.code) {

          //小程序第一次发起网络请求
          wx.request({
            url: that.globalData.url ,
            data: {
              code: res.code,
            },
            method: "POST",
            header: {
              'content-type': 'application/x-www-form-urlencoded'
            },
            success: function (res) {
              console.log(res.data)
               var wxSecretData = res.data.data.info;
              var wxSession = res.data.data.session_id;
               //存储缓存数据
               //服务器的session_id值
              wx.setStorageSync('PHPSESSID', wxSession);
              //3rd_session
              wx.setStorageSync('wxSecretData', wxSecretData);
              //存储成功后设置全局登录状态
              that.globalData.wxlogin = true


            }
          })
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    })

第二次及以后每次其他请求时必须加上cookie头,服务器端才会认为俩次请求为同一用户

 //获取手机号时对后端的请求
  getPhoneNumber: function (e) {
     //检测登录态
    wx.checkSession({
      success: function () {
        if (e.detail.errMsg ==="getPhoneNumber:ok"){
          //session 未过期,并且在本生命周期一直有效
          var session_id = wx.getStorageSync('PHPSESSID');//获取本地取存储的sessionID  
          //header头部加入cookie   PHPSESSID为php服务器跟浏览器中cookie中的session_id名字,不能更换,java为:JSESSIONID
          var header = { 'content-type': 'application/x-www-form-urlencoded', 'Cookie': 'PHPSESSID=' + session_id }
          //传值给服务器获取并存储
          wx.request({
            url: app.globalData.url ,
            data: {
              iv: e.detail.iv,
              secretCode: e.detail.encryptedData
            },
            method: 'POST',
            header: header,
            success: function (res) {
              console.log(res.data);
              return;
              if (res.data.status == 1) {
                //获取手机号。。。
              } else {
                wx.showToast({
                  title: '读取手机号失败',
                  image: app.globalData.wrongSrc,
                  duration: 2000
                })
              }
            },
            fail: function () {
              wx.showToast({
                title: '获取失败',
                image: app.globalData.wrongSrc,
                duration: 2000
              })
            }

          });
        }

      },
      fail: function () {
        //登录态过期
        wx.login() //重新登录

      }
    })

  },

PHP服务器端:

//获取当前服务器端的session_id,然后给小程序传值过去
 session_id();

你可能感兴趣的:(微信小程序,Php)