微信小程序实现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实现给出的盒子的序列是否可连为一矩型
Aug 30 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 Javascript
jQuery选择器之基本选择器与层次选择器
Mar 03 Javascript
javascript实现倒计时(精确到秒)
Jun 26 Javascript
JavaScript代码判断点击第几个按钮
Dec 13 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
Jan 28 Javascript
JS生成一维码(条形码)功能示例
Jan 19 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
Oct 26 Javascript
vue2.0 路由不显示router-view的解决方法
Mar 06 Javascript
TypeScript中的方法重载详解
Apr 12 Javascript
JS字符串常用操作方法实例小结
Jun 24 Javascript
JavaScript实现音乐导航效果
Nov 19 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版本如何选择?应该使用哪个版本?
2015/05/13 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python中下划线的使用方法
2015/03/27 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
python使用win32com库播放mp3文件的方法
2015/05/30 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
经营理念标语
2014/06/21 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
公司年夜饭通知
2015/04/25 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
浅析Python中的套接字编程
2021/06/22 Python
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏