微信小程序后端无法保持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里的条件判断
Feb 27 Javascript
使用js实现关闭js弹出层的窗口
Feb 10 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
Mar 18 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
Sep 04 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
May 05 Javascript
全面了解JavaScript的数据类型转换
Jul 01 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
Oct 10 Javascript
在一般处理程序(ashx)中弹出js提示语
Aug 16 Javascript
Angularjs实现上传图片预览功能
Sep 01 Javascript
如何从0开始用node写一个自己的命令行程序
Dec 29 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
Sep 27 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
Jan 21 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_SELF的安全问题
2009/09/05 PHP
php url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
JavaScript 特殊字符
2007/04/05 Javascript
javascript闭包的理解和实例
2010/08/12 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
AspNet中使用JQuery boxy插件的确认框
2015/05/20 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
责任胜于能力演讲稿
2014/05/20 职场文书
清明节演讲稿
2014/05/27 职场文书
球队口号
2014/06/18 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
delete in子查询不走索引问题分析
2022/07/07 MySQL