解决小程序请求PHP链接无法传递SESSION问题

小程序是通过微信服务器触发我们服务器,所以每次请求获取到的session_id都不同,导致小程序中无法获取和使用session,小程序的wx.request发起网络请求中有一个header参数,我们可以通过header传递一个固定参数到后台,作为session_id,这样sesion_id不发生变化,微信小程序中就可以使用或触发session了。

第一次发起网络请求的地方将服务器返回set-cookie当全局变量存储起来

1
2
3
4
5
6
7
8
9
10
11
wx.request({
......
success: function(res) {
console.log(res.header);
//set-cookie:PHPSESSID=pR3vj84acgvqgb655k82etiHu0; path=/; domain=.127.0.0.1

// 登录成功,获取第一次的sessionid,存储起来
// 注意:Set-Cookie(开发者工具中调试全部小写)(远程调试和线上首字母大写)
wx.setStorageSync("sessionid", res.header["Set-Cookie"]);
}
});

Tip:也可以在小程序刚加载时生成随机生成字符串当做sessionid使用,在小程序使用过程中不发生变化。

请求时把sessionid放入request的header头中传到服务器,服务器端可直接在cookie中获取

1
2
3
4
5
6
7
8
9
10
wx.request({
......
header: {
'cookie': wx.getStorageSync("sessionid")
//读取sessionid,当作cookie传入后台将PHPSESSID做session_id使用
},
success: function(res) {
console.log(res)
}
});

PHP后台获取cookie中的PHPSESSID,将PHPSESSID当作session_id使用

1
2
3
4
5
6
7
8
<?php
// 判断$_COOKIE['PHPSESSID']是否存在,存在则作session_id使用
if ($_COOKIE['PHPSESSID']) {
session_id($_COOKIE['PHPSESSID']);
}

session_start();
echo session_id();
坚持原创技术分享,您的支持将鼓励我继续创作!
0%