微信小程序实现Session功能及无法获取session问题的解决方法


Posted in Javascript onMay 07, 2019

因为小程序原生不支持Cookie,因此也不支持Session。

网上找到的的一些方法有缺陷,而且很多累赘,估计没有实际测试过,在此直接给出实测可用的代码。

大概思路就是借助小程序本地储存+网络请求的header可读可写来实现类似浏览器的cookies保存session功能。

直接上代码

function NetRequest({url, data, success, fail, complete, method = "POST", header = { 'Content-type': 'application/x-www-form-urlencoded' }}) {
 let session_id = wx.getStorageSync('PHPSESSID');//本地取存储的sessionID
 if (session_id != "" && session_id != null) { //本地session存在,则放到header里
  header.Cookie = session_id;
 }
 wx.request({
  url: url,
  method: method,
  data: data,
  header: header,
  success: res => {
   //发现response有Set-Cookie,说明本地的PHPSESSID需要更新或不存在:
   if(res.header["Set-Cookie"]){
    wx.setStorageSync('PHPSESSID', res.header["Set-Cookie"]);
   }
   res['statusCode'] === 200 ? success(res.data) : fail(res)
  },
  fail: fail,
  complete: complete
 })
}

其他语言的Session类似方法皆可实现。

PS:下面看下彻底解决小程序无法获取SESSION问题

最近在开发小程序,发现小程序是通过微信服务器触发我们服务器,所以每次请求获取到的session_id都不同,导致小程序中无法获取session,这样我就想如果session_id不发生变化,那么session是否可以使用呢???

查看了一下小程序的开发文档(wx.request);
发起网络请求中有一个header参数,
我们可以通过header传递一个固定参数到后台,
作为session_id,这样sesion_id不发生变化,
微信小程序中就可以使用或触发session了。

一、首先找到第一次发起网络请求的地址,将服务器返回set-cookie当全局变量存储起来

wx.request({
 ......//此处省略
 success: function(res) {
 console.log(res.header);
 wx.removeStorageSync('sessionid') //必须先清除,否则res.header['Set-Cookie']会报错
 //set-cookie:PHPSESSID=ic4vj84aaavqgb800k82etisu0; path=/; domain=.zhix.net
 // 登录成功,获取第一次的sessionid,存储起来
 // 注意:Set-Cookie(开发者工具中调试全部小写)(远程调试和线上首字母大写)
 wx.setStorageSync("sessionid", res.header["Set-Cookie"]);
 }
})

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

wx.request({
 ......
 header: {
 'content-type': 'application/json', // 默认值
 'cookie': wx.getStorageSync("sessionid")
 //读取sessionid,当作cookie传入后台将PHPSESSID做session_id使用
 },
 success: function(res) {
 console.log(res)
 }
})

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

<?php
// 判断$_COOKIE['PHPSESSID']是否存在,存在则作session_id
if ($_COOKIE['PHPSESSID']) {
 session_id($_COOKIE['PHPSESSID']);
}
session_start();
echo session_id();

总结

以上所述是小编给大家介绍的微信小程序实现Session功能及无法获取session问题的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JS高级拖动技术 setCapture,releaseCapture
Jul 31 Javascript
js绑定事件this指向发生改变的问题解决方法
Apr 23 Javascript
node.js中的fs.statSync方法使用说明
Dec 16 Javascript
jQuery 移动端artEditor富文本编辑器
Jan 11 Javascript
自定义require函数让浏览器按需加载Js文件
Nov 24 Javascript
Bootstrap模态框(Modal)实现过渡效果
Mar 17 Javascript
微信小程序 密码输入(源码下载)
Jun 27 Javascript
详解vue组件通信的三种方式
Jun 30 Javascript
微信小程序上传图片功能(附后端代码)
Jun 19 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
Sep 25 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
Apr 20 Javascript
vue+canvas实现移动端手写签名
May 21 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 #Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
May 07 #Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
May 07 #Javascript
vue接入腾讯防水墙代码
May 07 #Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
May 07 #Javascript
详解vue中使用protobuf踩坑记
May 07 #Javascript
Node.js一行代码实现静态文件服务器的方法步骤
May 07 #Javascript
You might like
yii上传文件或图片实例
2014/04/01 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
可输入的下拉框
2006/06/19 Javascript
js调用flash的效果代码
2008/04/26 Javascript
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
npm的lock机制解析
2019/06/20 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
如何搜索查找并解决Django相关的问题
2014/06/30 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
介绍一下游标
2012/01/10 面试题
二年级数学教学反思
2014/01/21 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
青年文明号汇报材料
2014/12/23 职场文书
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL