小程序session保持,后端php

小程序
wx.request()请求服务器后,session无法保留解决办法

app.js
全局变量(一定要看好是最新的,我写重了,微信也不报错)

globalData: {
    header: { 
      'Cookie': '',
    },
}

想写一个按钮测试,在register.wxml
<view>
  <button class="mini-btn" type="primary" size="mini"  bindtap="wxLogin">微信授权登录</button>
</view>

然后在项目比如 register.js中写
wxLogin: function () {
    var header = getApp().globalData.header;
    var dataType = getApp().globalData.dataType;
    var requestUrl = 'http://域名/xx/a.php';        //a.php写入session(我用的是小程序授权,哈哈)
    var secondUrl = 'http://同上域名/xx/b.php';    //b.php获取session
    //重新登录
    wx.login({
      success: res => {

        if (res.code) {
          //发起网络请求
          wx.request({
            url: requestUrl,
            method: 'POST',
            data: {
              cmd: 'auth_code2_session',
              data: {
                code: res.code
              }
            },
            header:header,    //第一次为空,为app.js中写入的globalData
            dataType: dataType,
            success(res) {
              if (res.statusCode == 200) {
                if (res.cookies.length != 0) {
                  console.log(res.cookies[0])//打印获取到的cookie
                  
                  getApp().globalData.header.Cookie = res.cookies[0]//写入到globalData中
                }
              }
              console.log(res)
              wx.request({
                url: secondUrl,
                method: 'GET',
                header:header,//取globalData,上面已经写入值              
                success(res) {
                  console.log(res)
                  
                }
              })

            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })

  },

后端我用的php.
a.php/b.php 头部写
header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_ORIGIN']);
   
header('Access-Control-Allow-Methods:POST,GET,DELETE,PATCH,OPTIONS'); // 允许跨域请求的属性
header('Access-Control-Allow-Credentials:true');
header('Access-Control-Allow-Headers:x-requested-with,content-type,openid,debug'); // 允许跨域请求头信息里携带的字段名称
header('Content-Type:application/json; Charset=utf-8');
header("Access-Control-Max-Age: 0");
header("XDomainRequestAllowed: 1");
session_start();

a.php写,写入session的操作
$_SESSION['a']='a';
b.php写,获取session的操作
var_dump($_SESSION['a']);

如果b.php拿不到,请留言,记住要贴代码哟。咱们一起研讨。


如果不是在小程序,则需要加crossDomain,xhrFields参数,例如
$.ajax({
    type: "POST",//方法类型
    dataType: "json",//预期服务器返回的数据类型
    crossDomain: true,
    xhrFields: {
         withCredentials: true
    },

    url: 'http://xxxx' ,//url  想跟小程序一样测试,您可以调用两侧ajax.一个调用a.php一个b.php 
    success: function (result) {
        
    },
    error : function(result) {
    }
});

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值