微信小程序后端无法保持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 相关文章推荐
经典的带阴影的可拖动的浮动层
Jun 26 Javascript
js简易namespace管理器 实例代码
Jun 21 Javascript
js 采用delete实现继承示例代码
May 20 Javascript
JavaScript中的replace()方法使用详解
Jun 06 Javascript
js表单验证实例讲解
Mar 31 Javascript
bootstrap+jQuery实现的动态进度条功能示例
May 25 jQuery
js 索引下标之li集合绑定点击事件
Jan 12 Javascript
使用 vue.js 构建大型单页应用
Feb 10 Javascript
jquery的$().each和$.each的区别
Jan 18 jQuery
vue-cli配置flexible过程详解
Jul 04 Javascript
vue子传父关于.sync与$emit的实现
Nov 05 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
Apr 09 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 程序员也要学会使用“异常”
2009/06/16 PHP
PHP制作用户注册系统
2015/10/23 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
Promise扫盲贴
2019/06/24 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Python三级菜单的实例
2017/09/13 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
如何用Python合并lmdb文件
2018/07/02 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
仓库主管的岗位职责
2013/12/04 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
使用Java去实现超市会员管理系统
2022/03/18 Java/Android
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL