微信小程序实现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(DHTML)中的一些技巧
Jan 09 Javascript
js/jquery获取文本框输入焦点的方法
Mar 04 Javascript
JavaScript中的anchor()方法使用详解
Jun 08 Javascript
jquery实现鼠标悬浮停止轮播特效
Aug 20 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
Jul 13 Javascript
深入浅出 jQuery中的事件机制
Aug 23 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
Jan 05 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
JS闭包的几种常见形式实例详解
Sep 16 Javascript
详解vue静态资源打包中的坑与解决方案
Feb 05 Javascript
如何在微信小程序中实现Mixins方案
Jun 20 Javascript
细述Javascript的加法运算符的具体使用
Oct 18 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的宝库目录--PEAR
2006/10/09 PHP
php 一元分词算法
2009/11/30 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
Laravel find in set排序实例
2019/10/09 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
Python 文件操作实现代码
2009/10/07 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python多线程并发及测试框架案例
2019/10/15 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
自学考试自我鉴定范文
2013/09/26 职场文书
《开国大典》教学反思
2014/04/19 职场文书
说明书格式及范文
2014/05/07 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
论文评审意见
2015/06/05 职场文书
驻村工作简报
2015/07/20 职场文书
python spilt()分隔字符串的实现示例
2021/05/21 Python
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android