微信小程序后端无法保持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 相关文章推荐
jQuery性能优化28条建议你值得借鉴
Feb 16 Javascript
类似php的js数组的in_array函数自定义方法
Dec 27 Javascript
javaScript如何处理从java后台返回的list
Apr 24 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
Jul 09 Javascript
jquery.map()方法的使用详解
Jul 09 Javascript
javascript每日必学之多态
Feb 23 Javascript
js编写选项卡效果
May 23 Javascript
Javascript创建类和对象详解
May 31 Javascript
JavaScript实现精美个性导航栏筋斗云效果
Oct 29 Javascript
详解js删除数组中的指定元素
Oct 31 Javascript
原生JS无缝滑动轮播图
Oct 22 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
Nov 12 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产生随机字符串函数
2006/12/06 PHP
PHP中“简单工厂模式”实例代码讲解
2012/09/04 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
一些Python中的二维数组的操作方法
2015/05/02 Python
Python字典简介以及用法详解
2016/11/15 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
Python sep参数使用方法详解
2020/02/12 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
python实现二分查找算法
2020/09/18 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
Yahoo-PHP面试题2
2014/12/06 面试题
电气自动化大学生求职信
2013/10/16 职场文书
测绘工程系学生的自我评价
2013/11/30 职场文书
中专生自我鉴定范文
2013/12/19 职场文书
大学生村官事迹材料
2014/01/21 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书