session失效、报错问题 (app接口对接,微信小程序对接)

在我们的项目中,接口验证都是用的token。token代表是否为同一个用户、同一次会话

一、手机端对接:在与手机端测试接口,出现session中token失效问题

      问题1:在某一个接口中写测试数据,把服务器端session的某一个值写死了,在解密手机端传过来的token时,发现信息不一致,就报错了。

      问题2:电视端进首页,有部分节点下面的内容是不需登录就能看到的内容,有的是必须登录才能操作的。但是安卓那边写的逻辑有问题,需要登录获取的节点内容他放在了登录之前,调用接口时检测token就报错了。

二、在与前端对接微信小程序的接口时,session失效问题

      问题:前几天在做微信小程序中,前端调用接口一直是token失效。

      网上搜索了一下,原来小程序的访问流程是:小程序---》微信服务器----》目标服务器,会通过微信服务器进行中转。因此在小程序中,由wx.request()发起的每次请求对于服务器来说都是不同的会话,这样导致后续请求都相当于未登录的状态。

      解决1:在用户登录时,我把服务端生成的会话sessionId返回到客户端(小程序),客户端小程序保存sessionId到本地,在客户端之后的每一次请求中都携带请求头  sessionId 就可以解决这个问题。

   //session 未过期,并且在本生命周期一直有效,获取本地取存储的sessionID  
   var session_id = wx.getStorageSync('PHPSESSID');
   
   //header头部加入cookie,注意:PHPSESSID为php服务器跟浏览器中cookie中的session_id名字,不能更换,java为:JSESSIONID
   var header = { 'content-type': 'application/x-www-form-urlencoded', 'Cookie': 'PHPSESSID=' + session_id }
   
   //传值给服务器获取并存储
      wx.request({
           url: '',
           data: {},
           method: 'POST',
           header: header,
           success: function (res) {}
      });
             

注意:如果服务器端对session设置了有效期,则服务器端需要在它过期之前定时刷新sessionId ,客户端也需要定时发起请求去获取新的sessionId。

    解决2:因为公司里之前接口请求与验证,都是使用session。但其实我们只是为了标志到底是哪个用户的哪次访问,既然在小程序里面不能使用cookie,那利用缓存也是可以的,redis和memcache也是有同样的效果,并且都能够设置有效期。

猜你喜欢

转载自blog.csdn.net/bianb123/article/details/81136538