小程序
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) {
}
});