基于微信公共號(hào)開發(fā)遇到的cookie問(wèn)題解決方案小記

最近在做微信公共號(hào)開發(fā)的時(shí)候遇到一些坑,特意記錄下來(lái),供大家參詳,如果有更好的方法或者解決思路,歡迎提供。

項(xiàng)目背景

在公眾號(hào)中有活動(dòng)頁(yè)面,引導(dǎo)用戶進(jìn)行平臺(tái)帳號(hào)的綁定操作,之后用戶的所有福利均可以在平臺(tái)中進(jìn)行查看,于是誕生了綁定賬號(hào)的需求。

目前有兩套帳號(hào)體系A(chǔ)和B,都需要帳號(hào)綁定,于是綁定的需求就更新為帳號(hào)打通與綁定的需求,域名為abc.com和def.com。

遇到的問(wèn)題

項(xiàng)目完成后,大家測(cè)試。結(jié)果B帳號(hào)體系的完全正常符合預(yù)期,綁定成功。但是A帳號(hào)體系則出現(xiàn)有的iphone可以綁定成功,有的iphone綁定失敗,安卓手機(jī)測(cè)試范圍不多,沒有遇到問(wèn)題。

排查思路

遇到這種問(wèn)題,最先開始的就是在服務(wù)端查看打點(diǎn)日志,看看究竟出了什么問(wèn)題。結(jié)果發(fā)現(xiàn)綁定失敗的請(qǐng)求,并沒有到達(dá)bind層。一直沒有bind的請(qǐng)求。那么也就是綁定頁(yè)面的前面一步,用戶登錄的時(shí)候出現(xiàn)異常了,由于綁定的頁(yè)面是在def.com域名下,A帳號(hào)體系屬于跨域操作,排查就聯(lián)想到是不是跨域?qū)е碌模蛘哒f(shuō)用戶是不是登錄成功了。于是我們?cè)谟袉?wèn)題的手機(jī)上訪問(wèn)了abc.com的頁(yè)面,發(fā)現(xiàn)用戶果然并沒有登錄成功。問(wèn)題是并不是所有的測(cè)試iphone都會(huì)出現(xiàn)這種問(wèn)題。

微信在安卓機(jī)器上是基于QQ瀏覽器的內(nèi)核。

微信在iphone上是iOS指定的內(nèi)核,UIWebView實(shí)現(xiàn)的:

查看一下ios的微信瀏覽器的信息如下

第一臺(tái):{"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"}

第二臺(tái):{"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"}

有可能是內(nèi)核做了這種安全的限制,限制了在跨域的情況下種cookie的操作。當(dāng)然沒有文獻(xiàn)資料,我是看現(xiàn)象猜測(cè)的。于是,我退出了微信,原來(lái)綁定成功的iphone也顯示綁定失敗,并且經(jīng)過(guò)排查與之前的出問(wèn)題的iphone手機(jī)一樣。既然在def.com里面不能正常的種cookie,那么在公共號(hào)內(nèi),我正常訪問(wèn)了abc.com的域名,隨便種了一個(gè)cookie,然后在訪問(wèn)def.com綁定的頁(yè)面,可能會(huì)覆蓋之前的cookie嗎?結(jié)果出問(wèn)題的iphone竟然綁定成功。

我們第一種解決方案:在綁定頁(yè)面,嵌入一個(gè)iframe, src就是abc.com的頁(yè)面,嘗試在進(jìn)入綁定頁(yè)面,就往abc.com域名下種cookie,結(jié)果失敗,貌似為了安全,這種限制只能是正常的訪問(wèn)才可以。

第二種方案:建立一個(gè)def.com的空頁(yè)面,作用就是獲取微信的code與跳轉(zhuǎn)到abc.com的頁(yè)面種cookie,然后abc.com的頁(yè)面再跳轉(zhuǎn)到def.com的綁定頁(yè)面,方案成功,但是稍微犧牲了用戶進(jìn)入頁(yè)面的體驗(yàn)。

總結(jié)

經(jīng)過(guò)這次踩坑,對(duì)于微信瀏覽器跨域種cookie有了積累,并且對(duì)于微信web開發(fā)者工具的不好用有了吐槽。尤其是多帳號(hào)體系的打通與綁定有了新的認(rèn)識(shí)。寫下來(lái)供大家把玩,有好的解決方案也可以留言提供。

待解決

1、base64位驗(yàn)證碼在微信的web開發(fā)者工具中不通過(guò)驗(yàn)證;

2、有沒有不三級(jí)跳,可以使用戶體驗(yàn)更好并且能夠解決問(wèn)題的方案。



非常感謝下面的這篇文章

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容