微信小程序后端无法保持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 相关文章推荐
jquery 页面全选框实践代码
Apr 02 Javascript
html页面显示年月日时分秒和星期几的两种方式
Aug 20 Javascript
js实现二级菜单渐隐显示
Nov 03 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
JavaScript实现九九乘法表的简单实例
Jun 07 Javascript
老生常谈javascript变量的命名规范和注释
Sep 29 Javascript
关于TypeScript中import JSON的正确姿势详解
Jul 25 Javascript
在vue-cli中组件通信的方法
Dec 16 Javascript
vue 2.0 购物车小球抛物线的示例代码
Feb 01 Javascript
Webpack devServer中的 proxy 实现跨域的解决
Jun 15 Javascript
vue npm install 安装某个指定的版本操作
Aug 11 Javascript
Vue 数据绑定的原理分析
Nov 16 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 读取Postgresql中的数组
2013/04/14 PHP
php内嵌函数用法实例
2015/03/20 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
微信小程序页面滑动屏幕加载数据效果
2020/11/16 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
值得收藏的vuejs安装教程
2017/11/21 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
js实现中文实时时钟
2020/01/15 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
Python实现excel转sqlite的方法
2017/07/17 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
师范大学音乐表演专业求职信
2013/10/23 职场文书
小班重阳节活动方案
2014/02/08 职场文书
党员教师工作决心书
2014/03/13 职场文书
男性健康日的活动方案
2014/08/18 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS