微信小程序踩坑

问题:

上个星期踩了一个比较严重的坑。大概就是登陆后空白数据,常见于演示版和正式版,时出现时不出现,关键是本地死活没问题。

分析:

分析过程很痛苦,首先本地测试发现不了问题,演示版和正式版才有问题,意味着我们没办法在本地tomcat进行测试。

百度搜索到的有几个点归纳如下:

  1. 域名配置。
  2. 不了了之。
  3. 小程序底层框架适配出bug 。
  4. 性能优化。

很明显以上问题过于玄学,我纠结了一段时间,又把底层优化了一遍,几次都以为可以了,多测试了几次还是有问题。

最后盯着服务器上面的tomcat的命令窗口,进行反复BUG测试,发现空白数据都是报错:

pagenotfound 198 POST Not Supported

很纳闷,首先不会是参数问题,因为没参数。后改为Get请求,依旧不行。最后在重启多次Tomcat中,发现一处错误。收到包含无效cookie的cookie头......

然后突然想看看cookie是不是有问题

   var header = {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Cookie': sessionId
    }

在正式环境打印了sessionId,多次刷新看了下,发现果然有问题。

这就不得不提及我原本取cookie的方法,取到的是cookie是这样的。

cookies: Array(2)
0: "__irm_session_id=*******; Path=/; HttpOnly"
1: "rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Mon 14-Sep-2020 09:33:11 GMT"
length: 2
nv_length: (...)
__proto__: Array(0)
data: {success: true, message: null, url: null, data: null, errorCode: null}
errMsg: "request:ok"
header: {Cache-Control: "private", Expires: "Thu, 01 Jan 1970 08:00:00 CST", Set-Cookie: "__irm_session_id=41eadbda-73b7-43d4-94d1-0f06e8983… Max-Age=0; Expires=Mon, 14-Sep-2020 09:33:11 GMT", Content-Type: "application/json;charset=UTF-8", Transfer-Encoding: "chunked", …}
statusCode: 200

然后我取到Cookie也就是

Cookie: "__irm_session_id=41eadbda-73b7-43d4-94d1-0f06e8983… Max-Age=0; Expires=Mon, 14-Sep-2020 09:33:11 GMT"

再进行从0位开始截取字符串的操作。然后问题来了,在正式服上会出现顺序换了的情况,并且是偶然性的,也就是如下:

cookies: Array(2)
0: "rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Mon 14-Sep-2020 09:33:11 GMT"
1: "__irm_session_id=*******; Path=/; HttpOnly"

这样从0开始取必然有问题。关键本地顺序不会变,就疏忽了这个方面。

小程序获取cookie代码修改如下:

var info = res.data.success;
                var cookie = res.header["Set-Cookie"];
                debugger
                if (undefined != cookie) {
                  {
                    var sessionPos;
                    if ((sessionPos = cookie.indexOf("__irm_session_id=")) != -1)                       {
                      if (sessionPos > 10) {
                        var sessionPosNew;
                        sessionPosNew = cookie.substring(sessionPos);
                        app.globalData.cookie = sessionPosNew.substring(0, sessionPosNew.indexOf(";"))
                      } else {
                        app.globalData.cookie = cookie.substring(sessionPos, cookie.indexOf(";"));
                      }
                    }
                  }

终究还是解决了,其实早该想到没有数据第一排查cookie,太依赖本地排查导致思维没发散。

posted @ 2020-08-29 17:02  boxJLP  阅读(370)  评论(1)    收藏  举报