微信小程序实现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 控制非法字符的输入代码
Dec 04 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
Dec 15 Javascript
js修改地址栏URL参数解决url参数问题
Dec 15 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
May 31 Javascript
深入理解vue.js双向绑定的实现原理
Dec 05 Javascript
canvas学习之API整理笔记(二)
Dec 29 Javascript
ReactJs设置css样式的方法
Jun 08 Javascript
微信小程序 同步请求授权的详解
Aug 04 Javascript
js实现敏感词过滤算法及实现逻辑
Jul 24 Javascript
Vue使用axios出现options请求方法
May 30 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
Nov 18 Javascript
使用vue构建多页面应用的示例
Oct 22 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
vue中的inject学习教程
2019/04/24 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
python实现的解析crontab配置文件代码
2014/06/30 Python
python实现跨文件全局变量的方法
2014/07/07 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
python获取list下标及其值的简单方法
2016/09/12 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
教学实习自我评价
2014/01/28 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
《秋思》教学反思
2016/02/23 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
Java设计模式之代理模式
2022/04/22 Java/Android
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server