微信小程序实现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 相关文章推荐
splice slice区别
Oct 09 Javascript
ExtJS 工具栏 分页事件参数
Mar 05 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
JavaScript 七大技巧(一)
Dec 13 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
Dec 20 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
Mar 06 Javascript
jQuery循环遍历子节点并获取值的方法
Apr 14 Javascript
微信小程序 教程之WXSS
Oct 18 Javascript
layui 地区三级联动 form select 渲染的实例
Sep 27 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 Javascript
Javascript执行流程细节原理解析
May 14 Javascript
canvas实现贪食蛇的实践
Feb 15 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
smarty简单入门实例
2014/11/28 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
php格式化json函数示例代码
2016/05/12 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
es6中比较有用的7个技巧小结
2019/07/12 Javascript
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
python集合常见运算案例解析
2019/10/17 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
python将数据插入数据库的代码分享
2020/08/16 Python
房地产营销策划方案
2014/02/08 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
公司备用金管理制度
2015/08/04 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL