微信小程序实现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获取单选按钮的数据
Nov 27 Javascript
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
Jun 02 Javascript
js constructor的实际作用分析
Nov 15 Javascript
Jquery方式获取iframe页面中的 Dom元素
May 07 Javascript
javascript实现的登陆遮罩效果汇总
Nov 09 Javascript
jQuery实现移动端滑块拖动选择数字效果
Dec 24 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
Mar 03 Javascript
jQuery EasyUI Pagination实现分页的常用方法
May 21 Javascript
javascript鼠标滑过显示二级菜单特效
Nov 18 Javascript
微信小程序 网络API Websocket详解
Nov 09 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
Jul 05 Javascript
vue项目出现页面空白的解决方案
Oct 31 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
监控 url fragment变化的js代码
2010/04/19 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
详解Python中的序列化与反序列化的使用
2015/06/30 Python
Python内置模块turtle绘图详解
2017/12/09 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
如何用Python合并lmdb文件
2018/07/02 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
百度JavaScript笔试题
2015/01/15 面试题
创业计划书中要认真思考的问题
2013/12/28 职场文书
大一军训感言
2014/01/09 职场文书
宿舍打麻将检讨书
2014/01/24 职场文书
三年级数学教学反思
2014/01/31 职场文书
企业指导教师评语
2014/04/28 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
国防教育标语
2014/10/08 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android