微信小程序实现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 相关文章推荐
Javascript操纵Cookie实现购物车程序
Feb 15 Javascript
js 内存释放问题
Apr 25 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
js浏览器本地存储store.js介绍及应用
May 13 Javascript
JavaScript中计算网页中某个元素的位置
Jun 10 Javascript
AngularJS directive返回对象属性详解
Mar 28 Javascript
js中数组的常用方法小结
Dec 30 Javascript
ES6新增数据结构WeakSet的用法详解
Aug 07 Javascript
浅谈Fetch 数据交互方式
Dec 20 Javascript
node.js express框架实现文件上传与下载功能实例详解
Oct 15 Javascript
JsonServer安装及启动过程图解
Feb 28 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
剖析 PHP 中的输出缓冲
2006/12/21 PHP
php程序效率优化的一些策略小结
2010/07/17 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
js 操作符汇总
2014/11/08 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
numpy基础教程之np.linalg
2019/02/12 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
关于赌博的检讨书
2014/01/24 职场文书
医德医风演讲稿
2014/05/20 职场文书
大学生党员批评与自我批评
2014/09/28 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
教师节感谢信
2015/01/22 职场文书
国富论读书笔记
2015/06/26 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python