您当前的位置: 首页 > 知识百科 > 实现小程序会话的相关问题及解决办法

实现小程序会话的相关问题及解决办法

时间:2023-07-01 14:05 阅读数:157 人阅读 分类:知识百科

  小程序会话功能在前期会对开发者开发小程序有所帮助,开发成功之后,又会大大提高用户的使用体验,好处不少。但是实现小程序会话的过程中会出现一些麻烦,需要不断地提交请求。那么实现小程序会话有什么问题呢?要怎么解决?

  小程序的HTTP请求全部使用wx.request({})方法,但是该方法每次都会产生一个新的会话,因此在特定小程序使用场景(安全验证、session保存、CSRF保护)等方面会遇到一些麻烦。比如csrf保护的应用中,即使上次拿到csrf,再下一次请求中又会失效。

  主要问题:

  1.调用微信提供的WebSocketApi,这个在官方有详细的例子。

  2.对接收和发送的JSON数据进行处理。

  3.处理完后,显示在布局中。

  解决方法:

  step 1: 获取sessionId以及csrf并保存

  已获取csrf为例,简单粗暴,在应用启动时候()可以在onLaunch时候)获取第一次请求的Cookie信息,保存在本地,以后每次在请求头强制加上cookie信息即可。

  代码入下:

  //app.js

  App({

  onLaunch:function(){

  this.initSession();

  },

  initSession:function(){

  var that = this;

  // step one:get cookie

  wx.request({

  url:'my.domain/open-api/cookie',

  header:{'Content-Type':'application/x--form-urlencoded'},

  method:'GET',

  success:function(res){

  for(let cookie of res.data){

  //这里我仅保存了sessionid,根据需要,也可以保存cookie的其它信息。

  if(cookie.name === 'JSESSIONID') {

  that.globalData.sessionId=cookie.value;

  wx.request({

  url:'my.domain/open-api/csrf',

  header:{'Content-Type':'application/x--form-urlencoded','Cookie':'JSESSIONID='+that.globalData.sessionId},

  method:'GET',

  success:function(res){

  that.globalData.csrf=res.data;

  }

  })

  break;

  }

  }

  }

  })

  }

  })

  step 2: 根据sessionId以及csrf请求别的小程序接口

  以后,每次请求别的api接口,就可以在请求头中添加csrf以及sessionId来维持同一个会话了。

  代码如下:

  doSth:function(){

  var that = this;

  wx.request({

  url:'my.domain/api/some-thing',

  //这里的CSRF的key(CSRF-TOKEN)具体写什么,根据各位自己的程序设置来写

  header:{'Content-Type':'application/x--form-urlencoded','Cookie':'JSESSIONID='+that.globalData.sessionId,'CSRF-TOKEN':that.globalData.csrf},

  method:'POST',

  data:paramdata,

  success:function(res){

  doSomething(res.data);

  }

  })

  }

  实现小程序会话最大的问题就是需要重复提交小程序请求,其实这也和微信小程序规则有关,官方规定了后台不保存任何数据。那么怎么保持小程序会话的状态,上文中介绍了两种方法,希望能给大家一个参考。更多相关资料请关注微信小程序商店。

  

  微信小程序客服会话功能怎么实现?

  小程序会话管理是怎样的?

  微信小程序会话服务器如何配置?