使用FreeHttp強(qiáng)制登出微信公眾號(hào)登陸狀態(tài)(實(shí)現(xiàn)~原理)
概述
我們使用的部分網(wǎng)站設(shè)計(jì)成一旦登錄即不允許用戶(hù)手動(dòng)退出,現(xiàn)實(shí)場(chǎng)景中是沒(méi)有問(wèn)題的
但如果是在測(cè)試或調(diào)試過(guò)程中就會(huì)有強(qiáng)制登出的需求
如果當(dāng)前使用的是PC瀏覽器,您或許可以通過(guò)調(diào)試模式清除保持登錄信息的數(shù)據(jù)實(shí)現(xiàn)手動(dòng)退出。
但是如果當(dāng)前使用的手機(jī)WEB瀏覽器,或者其他web嵌入的方式(比如微信公眾號(hào))退出是十分困難的
下面以退出微信公眾號(hào)下的京東到家為例,說(shuō)明如何使用FreeHttp實(shí)現(xiàn)手動(dòng)退出登錄功能(FreeHttp 說(shuō)明 http://www.rzrgm.cn/lulianqi/p/10428551.html)
準(zhǔn)備工作
1:您需要為您的移動(dòng)設(shè)備設(shè)置Fiddler代理,并安裝證書(shū)(手機(jī)代理及證書(shū)的安裝您可以通過(guò)百度查詢(xún)到相關(guān)文章)
2:FreeHttp的安裝詳見(jiàn)(http://www.rzrgm.cn/lulianqi/p/10428551.html#a00)
3:進(jìn)入微信登錄京東到家(測(cè)試中使用iphone6s移動(dòng)設(shè)備)

配置

如上圖配置
- 1:這里需要選擇一個(gè)session,該session包含該站點(diǎn)的登錄信息的cookies,您可以逐個(gè)查找,當(dāng)然如果您正在對(duì)該站進(jìn)行測(cè)試或調(diào)試,您應(yīng)該很清楚哪條請(qǐng)求包含這些信息
- 2:選擇完session后,我們使用Quick Rule中的Remove Session Cookies快速創(chuàng)建規(guī)則

當(dāng)您選擇Remove Session Cookies后會(huì)彈出上圖對(duì)話(huà)框,詢(xún)問(wèn)您是否需要修改Set-Cookie的屬性信息(如果不需要修改直接關(guān)閉即可),因?yàn)橛袝r(shí)候當(dāng)前URL的域可能不是瀏覽器中Cookie的Domian,這個(gè)時(shí)候您可能需要添加一個(gè)Domian來(lái)手動(dòng)指定
- 3:填寫(xiě)過(guò)濾規(guī)則,因?yàn)槟懿皇敲看味夹枰嬖V終端讓他清除cookies(事實(shí)上只需要一次就可以),這個(gè)Url一般都是主頁(yè)html等關(guān)鍵請(qǐng)求(提示:您可以直接拖動(dòng)session到輸入框中,完成url的輸入)

完成后您會(huì)發(fā)現(xiàn)『Response Modific』頁(yè)Add Head加入了許多Set-Cookie(因?yàn)闊o(wú)法確認(rèn)哪個(gè)cookie包含著登錄信息,Remove Session Cookies會(huì)默認(rèn)清除所有發(fā)現(xiàn)的cookie)
當(dāng)然大多數(shù)情況作為測(cè)試或開(kāi)發(fā)人員您是知道頁(yè)面哪個(gè)cookie標(biāo)識(shí)的用戶(hù)狀態(tài),如果是這樣您不需要使用Remove Session Cookies刪除頁(yè)面下所有cookie,而可以直接使用delete cookie手動(dòng)指定需要?jiǎng)h除的cookie即可
點(diǎn)擊確認(rèn)并設(shè)置規(guī)則生效
測(cè)試
- 現(xiàn)在您可以在微信里刷新京東到家當(dāng)前頁(yè)面

- 在列表中可以看到規(guī)則已經(jīng)被匹配到,查看報(bào)表信息可以看到修改已經(jīng)完成(黃色高亮session表示給請(qǐng)求是一個(gè)被FreeHttp修改過(guò)的請(qǐng)求)

- 這個(gè)時(shí)候再次查看微信公眾號(hào)里的頁(yè)面,您會(huì)發(fā)現(xiàn)當(dāng)前已經(jīng)處于未登錄狀態(tài)。
原理
- 因?yàn)镠ttp本身是無(wú)狀態(tài)的,如果要維護(hù)登錄狀態(tài)就需要應(yīng)用層面實(shí)現(xiàn)。
一般應(yīng)用會(huì)將登錄狀態(tài)放在客戶(hù)端Cookie中(這樣瀏覽器會(huì)幫助管理維護(hù)cookie),也有一些服務(wù)API會(huì)將令牌放在自定義header或查詢(xún)字符串等其他參數(shù)中(這一般出現(xiàn)在需要跨平臺(tái)的服務(wù)中,因?yàn)椴皇撬袘?yīng)用環(huán)境都是在瀏覽器中,有些嵌入式設(shè)備根本沒(méi)有瀏覽器)。
這一點(diǎn)很好區(qū)分,您只需要對(duì)比登錄狀態(tài)下的請(qǐng)求與不登錄狀態(tài)下請(qǐng)求的全部即可
我們這里是要清除微信公眾號(hào)應(yīng)用的登錄狀態(tài)(大部分都是通過(guò)cookie來(lái)做到的)
- 最后問(wèn)題變成如何清除指定cookie
我們知道瀏覽器中的cookie是一般由請(qǐng)求返回頭中的Set-Cookie指定的,瀏覽器接收到該返回頭即會(huì)為指定站點(diǎn)創(chuàng)建Cookie信息(詳細(xì)內(nèi)容可以看這里 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie)
在有調(diào)試模式的瀏覽器中我們很容易實(shí)現(xiàn),直接右鍵刪除,或通過(guò)js刪除,不過(guò)對(duì)于沒(méi)有調(diào)試模式的手機(jī)終端前面的方法看起來(lái)行不通了。
查看Set-Cookie規(guī)則,我們可以發(fā)現(xiàn)Max-Age屬性(過(guò)期時(shí)間),那我們只要把過(guò)期時(shí)間設(shè)置的足夠短不就可以騙過(guò)瀏覽器,讓它刪除我們想要?jiǎng)h除的cookie
注意這里Set-Cookie是響應(yīng)頭,所有必須瀏覽器先發(fā)起一個(gè)請(qǐng)求然后我們修改該請(qǐng)求的響應(yīng)頭,把帶有Max-Age=1屬性的Set-Cookie寫(xiě)入就可以了(Set-Cookie: name=delete by FreeHttp; Max-Age=1;Path=/)
改響應(yīng)的操作就直接通過(guò)Fiddler上的FreeHttp插件實(shí)現(xiàn)即可,操作即上文所述
FreeHttp詳細(xì)使用方法見(jiàn)(http://www.rzrgm.cn/lulianqi/p/10428551.html)

浙公網(wǎng)安備 33010602011771號(hào)