微信小程序后端无法保持session的原因及解决办法问题


Posted in Javascript onMarch 20, 2020

之前未接触过微信小程序项目,在使用jQuery库的ajax中很正常,服务器也能保持会话状态。在使用wx.request中发现会话一直不能保持,一开始以为是服务器php.ini配置错误,

  • 在代码中加入session_start()或者开启session.auto_start()
  • 确认session.save_path配置正确且有读写权限

的情况下仍无效果。以上方法确实可以解决大多数情况下的页面刷新session无法保持问题。

但是在设置之后都没有效果。

最后发现,原来是jQuery的ajax(应该是浏览器)会自动维护cookie,而wx.request不会。
这涉及到session与cookie的关系及保存机制的问题。

首先,cookie是保存在客户端的信息,而session是保存在服务器的信息。

那服务器如何识别单独用户的session,在一次连接下,如何判别该用户是属于哪一个session。
机制是,服务器生成一个sessionid辨别用户,并在相应中的cookie带上该sessionid值。在用户下一次请求时,请求头中cookie理应也带上该sessionid,以便服务器辨别用户会话。其中辨别机制和session存储机制涉及到序列和反序列化,在session.save_path中,为每一个session单独创建一个文件,文件名为sessionid,内容则是此次会话保存的session。

而wx.request并不会在请求中带上cookie,所以导致每次请求都被服务器分配一个新的sessionid,造成会话不能保持的后果。

解决办法

应在wx.request中带上该sessionid,或者重新封装wx.request。

2019/9/27更新:
自己维护一个header,在wx.request中保存和发送Cookie。
首先在app.js中存储一个全局变量,存放header。

globalData: {
  header: {
   "content-type": "application/x-www-form-urlencoded",
   'Cookie': ''
  }
 }

然后在每一次wx.request中的请求参数中带上该header。
在每一次响应中检测并保存Cookie到header。

wx.request({
   url: 'http://localhost/loginDemo/server/loginTest.php',
   //带上请求头
   header: getApp().globalData.header,
   method: 'POST',
   data: {
    action: "login",
    user: that.data.userInfo.nickName
   },
   success: function(res){
    console.log(res)
    //dosometing...
    //判断后端响应中有没有set-cookie值,有即是后端需要设置cookie,在此例中后端设置session id
    if (res.header["Set-Cookie"] != null) {
     //设置cookie
     getApp().globalData.header["Cookie"] += res.header["Set-Cookie"]
    }
   },
   fail: function (res) {
    console.log(res)
    wx.showToast({
     title: '连接服务器失败',
     icon: "none"
    })
   }
  })

测试

微信小程序后端无法保持session的原因及解决办法问题

第一次请求,本地(header)没有Cookie存储的PHPSESSIONID。

微信小程序后端无法保持session的原因及解决办法问题

第一次请求响应,服务器返回Set-Cookie,带上phpsessionID。
自己维护,存储到header中。

微信小程序后端无法保持session的原因及解决办法问题

第二次请求带上header,有sessionID。

微信小程序后端无法保持session的原因及解决办法问题

第二次请求响应服务器检测到session,恢复会话,不创建新的会话。

以上方法基本能解决微信小程序Cookie问题。更多相关小程序后端无法保持session内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
克隆javascript对象的三个方法小结
Jan 12 Javascript
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
Aug 19 Javascript
JavaScript通过事件代理高亮显示表格行的方法
May 27 Javascript
jQuery插件echarts去掉垂直网格线用法示例
Mar 03 Javascript
JS实现列表页面隔行变色效果
Mar 25 Javascript
vue.js指令和组件详细介绍及实例
Apr 06 Javascript
深入探究node之Transform
Jul 20 Javascript
Material(包括Material Icon)在Angular2中的使用详解
Feb 11 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 Javascript
vue实现前端列表多条件筛选
Oct 26 Javascript
js 闭包深入理解与实例分析
Mar 19 #Javascript
JS一次前端面试经历记录
Mar 19 #Javascript
jQuery实现点击滚动到指定元素上的方法分析
Mar 19 #jQuery
浅析TypeScript 命名空间
Mar 19 #Javascript
JavaScript计算出两个数的差值
Mar 19 #Javascript
JavaScript利用键盘码控制div移动
Mar 19 #Javascript
js实现百度登录窗口拖拽效果
Mar 19 #Javascript
You might like
多人战的战术与战略
2020/03/04 星际争霸
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Python中几种操作字符串的方法的介绍
2015/04/09 Python
wxPython中listbox用法实例详解
2015/06/01 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
python组合无重复三位数的实例
2018/11/13 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
python如何求圆的面积
2020/07/01 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
介绍一下Ruby的特点
2013/01/20 面试题
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
心理健康心得体会
2014/01/02 职场文书
校园安全广播稿
2014/02/08 职场文书
学校消防演习方案
2014/02/19 职场文书
班主任新年寄语
2014/04/04 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
雷锋的故事观后感
2015/06/10 职场文书
利用JavaScript写一个简单计算器
2021/11/27 Javascript