微信小程序后端无法保持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读取html5 localstorage的值的方法
Jan 04 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
May 08 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
Jul 09 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
Oct 24 Javascript
jquery中子元素和后代元素的区别示例介绍
Apr 02 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
Angular ui.bootstrap.pagination分页
Jan 20 Javascript
vue中$refs的用法及作用详解
Apr 24 Javascript
跨域解决之JSONP和CORS的详细介绍
Nov 21 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 Javascript
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
PHP chr()函数讲解
2019/02/11 PHP
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
详解jquery选择器的原理
2017/08/01 jQuery
Angular2 http jsonp的实例详解
2017/08/31 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python speech模块的使用方法
2020/09/09 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
python 模拟登录B站的示例代码
2020/12/15 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
JAVA代码查错题
2014/10/10 面试题
火山动力Java笔试题
2014/06/26 面试题
女方回门宴答谢词
2014/01/14 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
企业授权委托书范本
2014/09/22 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
CSS3 实现的图片悬停的切换按钮
2021/04/13 HTML / CSS
python中 .npy文件的读写操作实例
2022/04/14 Python