微信小程序实现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 相关文章推荐
jscript之Read an Excel Spreadsheet
Jun 13 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
Jul 17 Javascript
jquery中获取元素的几种方式小结
Jul 05 Javascript
js使用栈来实现10进制转8进制与取除数及余数
Jun 11 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
Nov 23 Javascript
js removeChild 方法深入理解
Aug 16 Javascript
jQuery中DOM节点删除之empty与remove
Jan 20 Javascript
jQuery中on方法使用注意事项详解
Feb 15 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
Sep 01 Javascript
浅析微信扫码登录原理(小结)
Oct 29 Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 Javascript
layui实现左侧菜单点击右侧内容区显示
Jul 26 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抓取https的内容的代码
2010/04/06 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
php知道与问问的采集插件代码
2010/10/12 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
js 操作符实例代码
2009/10/24 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
解决python写的windows服务不能启动的问题
2014/04/15 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
教师专业自荐书范文
2014/02/10 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
作风转变心得体会
2014/09/02 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript
vue+spring boot实现校验码功能
2021/05/27 Vue.js
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python