我们使用的部分网站设计成一旦登录即不允许用户手动退出,现实场景中是没有问题的
但如果是在测试或调试过程中就会有强制登出的需求
如果当前使用的是PC浏览器,您或许可以通过调试模式清除保持登录信息的数据实现手动退出。
但是如果当前使用的手机WEB浏览器,或者其他web嵌入的方式(比如微信公众号)退出是十分困难的
下面以退出微信公众号下的京东到家为例,说明如何使用FreeHttp实现手动退出登录功能(FreeHttp 说明 https://cloud.tencent.com/developer/article/1400326)
1:您需要为您的移动设备设置Fiddler代理,并安装证书(手机代理及证书的安装您可以通过百度查询到相关文章)
2:FreeHttp的安装详见(https://cloud.tencent.com/developer/article/1400326)
3:进入微信登录京东到家(测试中使用iphone6s移动设备)
如上图配置
当您选择Remove Session Cookies后会弹出上图对话框,询问您是否需要修改Set-Cookie的属性信息(如果不需要修改直接关闭即可),因为有时候当前URL的域可能不是浏览器中Cookie的Domian,这个时候您可能需要添加一个Domian来手动指定
完成后您会发现『Response Modific』页Add Head加入了许多Set-Cookie(因为无法确认哪个cookie包含着登录信息,Remove Session Cookies会默认清除所有发现的cookie) 当然大多数情况作为测试或开发人员您是知道页面哪个cookie标识的用户状态,如果是这样您不需要使用Remove Session Cookies删除页面下所有cookie,而可以直接使用delete cookie手动指定需要删除的cookie即可 点击确认并设置规则生效
一般应用会将登录状态放在客户端Cookie中(这样浏览器会帮助管理维护cookie),也有一些服务API会将令牌放在自定义header或查询字符串等其他参数中(这一般出现在需要跨平台的服务中,因为不是所有应用环境都是在浏览器中,有些嵌入式设备根本没有浏览器)。
这一点很好区分,您只需要对比登录状态下的请求与不登录状态下请求的全部即可
我们这里是要清除微信公众号应用的登录状态(大部分都是通过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://cloud.tencent.com/developer/article/1400326)
不过使用TLS可以对其安全性进行加强(即https),