微信小程序实现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 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
javascript arguments 传递给函数的隐含参数
Aug 21 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
Dec 04 Javascript
js+jquery实现图片裁剪功能
Jan 02 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
Jan 06 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
Jan 16 Javascript
Vue单文件组件的如何使用方式介绍
Jul 28 Javascript
vue系列之动态路由详解【原创】
Sep 10 Javascript
浅谈在koa2中实现页面渲染的全局数据
Oct 09 Javascript
JavaScript实现职责链模式概述
Jan 25 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 22 Javascript
openlayers4.6.5实现距离量测和面积量测
Sep 25 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 url地址栏传中文乱码解决方法集合
2010/06/25 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
Whistles官网:英国女装品牌
2020/08/14 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
优秀导游先进事迹材料
2014/01/25 职场文书
物理教学随笔感言
2014/02/22 职场文书
党员剖析材料范文
2014/09/30 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
MySQL锁机制
2021/04/05 MySQL
python获取淘宝服务器时间的代码示例
2021/04/22 Python