微信小程序后端无法保持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 事件冒泡简介及应用
Jan 11 Javascript
jquery1.4 教程二 ajax方法的改进
Feb 25 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
Dec 17 Javascript
JS 精确统计网站访问量的实例代码
Jul 05 Javascript
jQuery实现平滑滚动的标签分栏切换效果
Aug 28 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
vue+springboot实现项目的CORS跨域请求
Sep 05 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
May 07 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
Jun 03 Javascript
原生js实现点击轮播切换图片
Feb 11 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
Oct 21 Javascript
Nuxt的路由配置和参数传递方式
Nov 06 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 email邮箱正则
2008/10/08 PHP
php 高效率写法 推荐
2010/02/21 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
javascript中的this详解
2014/12/08 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
javascript模拟命名空间
2015/04/17 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
Python全排列操作实例分析
2018/07/24 Python
python实现C4.5决策树算法
2018/08/29 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
python圣诞树编写实例详解
2020/02/13 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
4s店总经理岗位职责
2013/12/31 职场文书
校庆接待方案
2014/03/18 职场文书
安全生产月活动总结
2014/05/04 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS