我們使用的部分網站設計成一旦登入即不允許使用者手動退出,現實場景中是沒有問題的
但如果是在測試或調試過程中就會有強制登出的需求
如果目前使用的是PC浏覽器,您或許可以通過調試模式清除保持登入資訊的資料實作手動退出。
但是如果目前使用的手機WEB浏覽器,或者其他web嵌入的方式(比如微信公衆号)退出是十分困難的
下面以退出微信公衆号下的京東到家為例,說明如何使用FreeHttp實作手動登出功能(FreeHttp 說明 https://www.cnblogs.com/lulianqi/p/10428551.html)
1:您需要為您的移動裝置設定Fiddler代理,并安裝證書(手機代理及證書的安裝您可以通過百度查詢到相關文章)
2:FreeHttp的安裝詳見(https://www.cnblogs.com/lulianqi/p/10428551.html#a00)
3:進入微信登入京東到家(測試中使用iphone6s移動裝置)

如上圖配置
1:這裡需要選擇一個session,該session包含該站點的登入資訊的cookies,您可以逐個查找,當然如果您正在對該站進行測試或調試,您應該很清楚哪條請求包含這些資訊
2:選擇完session後,我們使用Quick Rule中的Remove Session Cookies快速建立規則
當您選擇Remove Session Cookies後會彈出上圖對話框,詢問您是否需要修改Set-Cookie的屬性資訊(如果不需要修改直接關閉即可),因為有時候目前URL的域可能不是浏覽器中Cookie的Domian,這個時候您可能需要添加一個Domian來手動指定
3:填寫過濾規則,因為能不是每次都需要告訴終端讓他清除cookies(事實上隻需要一次就可以),這個Url一般都是首頁html等關鍵請求(提示:您可以直接拖動session到輸入框中,完成url的輸入)
完成後您會發現『Response Modific』頁Add Head加入了許多Set-Cookie(因為無法确認哪個cookie包含着登入資訊,Remove Session Cookies會預設清除所有發現的cookie)
當然大多數情況作為測試或開發人員您是知道頁面哪個cookie辨別的使用者狀态,如果是這樣您不需要使用Remove Session Cookies删除頁面下所有cookie,而可以直接使用delete cookie手動指定需要删除的cookie即可
點選确認并設定規則生效
現在您可以在微信裡重新整理京東到家目前頁面
在清單中可以看到規則已經被比對到,檢視報表資訊可以看到修改已經完成(黃色高亮session表示給請求是一個被FreeHttp修改過的請求)
這個時候再次檢視微信公衆号裡的頁面,您會發現目前已經處于未登入狀态。
因為Http本身是無狀态的,如果要維護登入狀态就需要應用層面實作。
一般應用會将登入狀态放在用戶端Cookie中(這樣浏覽器會幫助管理維護cookie),也有一些服務API會将令牌放在自定義header或查詢字元串等其他參數中(這一般出現在需要跨平台的服務中,因為不是所有應用環境都是在浏覽器中,有些嵌入式裝置根本沒有浏覽器)。
這一點很好區分,您隻需要對比登入狀态下的請求與不登入狀态下請求的全部即可
我們這裡是要清除微信公衆号應用的登入狀态(大部分都是通過cookie來做到的)
最後問題變成如何清除指定cookie
我們知道浏覽器中的cookie是一般由請求傳回頭中的Set-Cookie指定的,浏覽器接收到該傳回頭即會為指定站點建立Cookie資訊(詳細内容可以看這裡 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie)
在有調試模式的浏覽器中我們很容易實作,直接右鍵删除,或通過js删除,不過對于沒有調試模式的手機終端前面的方法看起來行不通了。
檢視Set-Cookie規則,我們可以發現Max-Age屬性(過期時間),那我們隻要把過期時間設定的足夠短不就可以騙過浏覽器,讓它删除我們想要删除的cookie
注意這裡Set-Cookie是響應頭,所有必須浏覽器先發起一個請求然後我們修改該請求的響應頭,把帶有Max-Age=1屬性的Set-Cookie寫入就可以了(Set-Cookie: name=delete by FreeHttp; Max-Age=1;Path=/)
改響應的操作就直接通過Fiddler上的FreeHttp插件實作即可,操作即上文所述
FreeHttp詳細使用方法見(https://www.cnblogs.com/lulianqi/p/10428551.html)