微信小程序后端无法保持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 相关文章推荐
关于页面嵌入swf覆盖div层的问题的解决方法
Feb 11 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
Jun 24 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
node.js require() 源码解读
Dec 13 Javascript
JavaScript中的事件委托及好处
Jul 12 Javascript
jQuery.datatables.js插件用法及api实例详解
Oct 28 Javascript
微信公众号支付H5调用支付解析
Nov 04 Javascript
js中的事件委托或是事件代理使用详解
Jun 23 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
uni-app如何实现增量更新功能
Jan 03 Javascript
微信小程序仿通讯录功能
Apr 09 Javascript
详解React路由传参方法汇总记录
Nov 29 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
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
python比较2个xml内容的方法
2015/05/11 Python
Python使用matplotlib绘制动画的方法
2015/05/20 Python
理解Python垃圾回收机制
2016/02/12 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
Python的互斥锁与信号量详解
2019/09/12 Python
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
zooplus意大利:在线宠物商店
2019/08/07 全球购物
倡议书格式
2014/08/30 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
个人政治思想总结
2015/03/05 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书