美文网首页
基于微信公共号开发遇到的cookie问题解决方案小记

基于微信公共号开发遇到的cookie问题解决方案小记

作者: 圈圈不能用 | 来源:发表于2016-11-10 21:36 被阅读0次

最近在做微信公共号开发的时候遇到一些坑,特意记录下来,供大家参详,如果有更好的方法或者解决思路,欢迎提供。

项目背景

在公众号中有活动页面,引导用户进行平台帐号的绑定操作,之后用户的所有福利均可以在平台中进行查看,于是诞生了绑定账号的需求。

目前有两套帐号体系A和B,都需要帐号绑定,于是绑定的需求就更新为帐号打通与绑定的需求,域名为abc.com和def.com。

遇到的问题

项目完成后,大家测试。结果B帐号体系的完全正常符合预期,绑定成功。但是A帐号体系则出现有的iphone可以绑定成功,有的iphone绑定失败,安卓手机测试范围不多,没有遇到问题。

排查思路

遇到这种问题,最先开始的就是在服务端查看打点日志,看看究竟出了什么问题。结果发现绑定失败的请求,并没有到达bind层。一直没有bind的请求。那么也就是绑定页面的前面一步,用户登录的时候出现异常了,由于绑定的页面是在def.com域名下,A帐号体系属于跨域操作,排查就联想到是不是跨域导致的,或者说用户是不是登录成功了。于是我们在有问题的手机上访问了abc.com的页面,发现用户果然并没有登录成功。问题是并不是所有的测试iphone都会出现这种问题。

微信在安卓机器上是基于QQ浏览器的内核。

微信在iphone上是iOS指定的内核,UIWebView实现的:

查看一下ios的微信浏览器的信息如下

第一台:{"appname":"Netscape","appVersion":"5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\/602.1.50 (KHTML, like Gecko) Mobile\/14A456 MicroMessenger\/6.3.30 NetType\/WIFI Language\/zh_CN","appCodeName":"Mozilla","userAgent":"Mozilla\/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\/602.1.50 (KHTML, like Gecko) Mobile\/14A456 MicroMessenger\/6.3.30 NetType\/WIFI Language\/zh_CN"}

第二台:{"appname":"Netscape","appVersion":"5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit\/601.1.46 (KHTML, like Gecko) Mobile\/13G36 MicroMessenger\/6.3.30 NetType\/WIFI Language\/zh_CN","appCodeName":"Mozilla","userAgent":"Mozilla\/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit\/601.1.46 (KHTML, like Gecko) Mobile\/13G36 MicroMessenger\/6.3.30 NetType\/WIFI Language\/zh_CN"}

有可能是内核做了这种安全的限制,限制了在跨域的情况下种cookie的操作。当然没有文献资料,我是看现象猜测的。于是,我退出了微信,原来绑定成功的iphone也显示绑定失败,并且经过排查与之前的出问题的iphone手机一样。既然在def.com里面不能正常的种cookie,那么在公共号内,我正常访问了abc.com的域名,随便种了一个cookie,然后在访问def.com绑定的页面,可能会覆盖之前的cookie吗?结果出问题的iphone竟然绑定成功。

我们第一种解决方案:在绑定页面,嵌入一个iframe, src就是abc.com的页面,尝试在进入绑定页面,就往abc.com域名下种cookie,结果失败,貌似为了安全,这种限制只能是正常的访问才可以。

第二种方案:建立一个def.com的空页面,作用就是获取微信的code与跳转到abc.com的页面种cookie,然后abc.com的页面再跳转到def.com的绑定页面,方案成功,但是稍微牺牲了用户进入页面的体验。

总结

经过这次踩坑,对于微信浏览器跨域种cookie有了积累,并且对于微信web开发者工具的不好用有了吐槽。尤其是多帐号体系的打通与绑定有了新的认识。写下来供大家把玩,有好的解决方案也可以留言提供。

待解决

1、base64位验证码在微信的web开发者工具中不通过验证;

2、有没有不三级跳,可以使用户体验更好并且能够解决问题的方案。

非常感谢下面的这篇文章

http://blog.csdn.net/zhx19920405/article/details/51417250

相关文章

网友评论

      本文标题:基于微信公共号开发遇到的cookie问题解决方案小记

      本文链接:https://www.haomeiwen.com/subject/gybfuttx.html