微信小程序维持会话状态的一种方式

本文共有1728个字,页面加载耗时0.001秒,关键词:

近期做一个小程序耍一耍,发现小程序wx.requeest()并不自动维持会话状态。

大致思路

自己添加小程序发起请求时头部的Cookies

代码

触发保存sessionid

 getSessionId:function(){
    let that = this;
    wx.request({
      url:app.globalData.baseUrl+"getSessionId",
      data:{
        'name':that.data.inputname //测试存储session内容
      },
      success :res=>{
        console.log(res);
        if(res.data.errno == 0){
          console.log(res.data.sessionid);
          wx.setStorage({ //可以采用缓存,这样可以长时间维持会话,也可以使用全局变量,维持一次会话。
            key: "PHPSESSID",
            data: res.data.sessionid  //这里的session是后端通过`session_id()`获取的
          })
        }
      }
    });
  }

测试获取内容

  getSessionContext:function(){
    let that = this;
    wx.getStorage({
      key: 'PHPSESSID',
      success(res) {
        console.log(res.data)
        that.setData({
          sessionid: res.data
        });
      },
      complete(){
        wx.request({
          url: app.globalData.baseUrl + 'getSessionContext',
          header: {
            'Cookie': 'PHPSESSID=' + that.data.sessionid, // 默认值
          },
          success: res => {
            console.log(res);
            if (res.errno == 0) {
              that.setData({
                sessionContext: res.context
              })
            }
          }
        })
      }
    })
  },

后端代码php

    public function getSessionId(){
        session('name',input('name'));
        return json(['errno'=>0,'sessionid'=>session_id(),'name'=>session('name')]);
    }

    public function getSessionContext(){
        return json(['errno'=>0,'context'=>session('name')?:'啥也没有']);
    }

扫码在手机查看