微信小程序踩坑
问题:
上个星期踩了一个比较严重的坑。大概就是登陆后空白数据,常见于演示版和正式版,时出现时不出现,关键是本地死活没问题。
分析:
分析过程很痛苦,首先本地测试发现不了问题,演示版和正式版才有问题,意味着我们没办法在本地tomcat进行测试。
百度搜索到的有几个点归纳如下:
- 域名配置。
- 不了了之。
- 小程序底层框架适配出bug 。
- 性能优化。
很明显以上问题过于玄学,我纠结了一段时间,又把底层优化了一遍,几次都以为可以了,多测试了几次还是有问题。
最后盯着服务器上面的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,太依赖本地排查导致思维没发散。

浙公网安备 33010602011771号