微信小程序后端无法保持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 相关文章推荐
新闻内页-JS分页
Jun 07 Javascript
HTML代码中标签的全部属性 中文注释说明
Mar 26 Javascript
jQuery1.5.1 animate方法源码阅读
Apr 05 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
Mar 25 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
Mar 10 Javascript
Vue 2.X的状态管理vuex记录详解
Mar 23 Javascript
利用JS实现简单的瀑布流加载图片效果
Apr 22 Javascript
Vue导出页面为PDF格式的实现思路
Jul 31 Javascript
对layui中表单元素的使用详解
Aug 15 Javascript
详解Eslint 配置及规则说明
Sep 10 Javascript
Vue项目中配置pug解析支持
May 10 Javascript
vue-router中hash模式与history模式的区别
Jun 23 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
献给php初学者(入门学习经验谈)
2010/10/12 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
PHP加密解密类实例代码
2016/07/20 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
accesskey 提交
2006/06/26 Javascript
解放web程序员的输入验证
2006/10/06 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
javascript如何写热点图
2015/12/08 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
进一步了解Python中的XML 工具
2015/04/13 Python
查看django版本的方法分享
2018/05/14 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
详解Python的三种可变参数
2019/05/08 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
工商治理实习生的自我评价
2014/01/15 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
作息时间调整通知
2015/04/22 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
关于Python中*args和**kwargs的深入理解
2021/08/07 Python
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android