微信小程序实现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调试技巧解决样式问题的步骤分享
Mar 15 Javascript
js防止表单重复提交实现代码
Sep 05 Javascript
js 使用form表单select类实现级联菜单效果
Dec 19 Javascript
JS中表单的使用小结
Jan 11 Javascript
使用jquery中height()方法获取各种高度大全
Apr 02 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
Jun 28 Javascript
遍历js中对象的属性和值的实例
Nov 21 Javascript
div实现自适应高度的textarea实现angular双向绑定
Jan 08 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
重学 JS:为啥 await 不能用在 forEach 中详解
Apr 15 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
Apr 28 Javascript
js观察者模式的弹幕案例
Nov 23 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字符串函数的总结分析
2013/06/05 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
写一个Vue Popup组件
2019/02/25 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
车间组长岗位职责
2013/12/20 职场文书
幼儿教师研修感言
2014/02/12 职场文书
初中学习计划书范文
2014/09/15 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
Redis唯一ID生成器的实现
2022/07/07 Redis