微信小程序后端无法保持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 相关文章推荐
javascript 写的一个简单的timer
Jul 30 Javascript
加载jQuery后$冲突的解决办法
Jul 09 Javascript
JavaScript flash复制库类 Zero Clipboard
Jan 17 Javascript
js对象关系图 方便dom操作
Mar 18 Javascript
js选择并转移导航菜单示例代码
Aug 19 Javascript
jQuery团购倒计时特效实现方法
May 07 Javascript
jQuery基础知识点总结(DOM操作)
Jun 01 Javascript
关于在Servelet中如何获取当前时间的操作方法
Jun 28 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
Oct 28 jQuery
基于JavaScript 性能优化技巧心得(分享)
Dec 11 Javascript
微信小程序实现搜索功能
Mar 10 Javascript
js实现飞机大战小游戏
Aug 26 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实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
CI框架常用方法小结
2016/05/17 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
Python中的下划线详解
2015/06/24 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
数百万免费的图形资源:Freepik
2020/09/21 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
计算机专业求职信
2014/06/02 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
圣诞晚会主持词
2015/07/01 职场文书
中学政教处工作总结
2015/08/13 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
八年级作文之感恩
2019/11/22 职场文书
导游词之西安骊山
2019/12/20 职场文书
CSS 伪元素::marker详解
2021/06/26 HTML / CSS