专栏首页lulianqi使用FreeHttp强制登出微信公众号登陆状态(实现~原理)

使用FreeHttp强制登出微信公众号登陆状态(实现~原理)

概述

我们使用的部分网站设计成一旦登录即不允许用户手动退出,现实场景中是没有问题的

但如果是在测试或调试过程中就会有强制登出的需求

如果当前使用的是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移动设备)

配置

如上图配置

  • 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://cloud.tencent.com/developer/article/1400326

不过使用TLS可以对其安全性进行加强(即https),

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何添加一种新Case协议

    您必须在这里设计好您协议预先需要的数据(比如串口协议,那波特率,串口号等可能是不会经常改变的就可以在这里先预设置)

    lulianqi
  • abstract virtaul override new 及多态

    abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽...

    lulianqi
  • 使用FreeCookies 控制浏览器cookies及修改http响应内容

    1:您的计算机需要已经安装Fiddler (如未安装,请至官网下载安装 http://docs.telerik.com/fiddler/configure-fi...

    lulianqi
  • JDK 8 & tomcat 镜像准备

    Docker hub 上没有现成的官方 Oracle JDK 8, 所以自己准备一个吧。

    谢正伟
  • 原创|互联网公司必备利器Kafka终极入门,最后一篇

    基于第一节教程中配置的dcoker kafka 镜像,基于kakfa镜像创建容器。创建3台kafka容器,同样将容器指定backend桥接网络,这样做的好处是容...

    double
  • Web前端性能优化教程03:网站样式和脚本&减少DNS查找、避免重定向

    一、将样式表放在顶部 可视性回馈的重要性 进度指示器有三个主要优势——它们让用户知道系统没有崩溃,只是正在为他或她解决问题;它们指出了用户大概还需要等多久,以便...

    逸鹏
  • 大话机器学习之决策树(DS)

          这是一个医疗检测的数据,前面六个是指标,具体是什么其实没有意义,说的好像化验单上的那些医学术语你都知道似得。最后一个就是结果。我们就是要构建一颗决策...

    钱塘小甲子
  • Redis 学习笔记 3.1 热身

    这章介绍 Redis 的5种数据类型,每节都由“介绍”、“命令”、“实践”和“命令拾遗”四部分组成。这种学习思路很符合初学者上手。

    twowinter
  • shiro

      Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何...

    Mister24
  • django3 websockets

    现在Django 3.0附带了对ASGI的支持,将Websockets添加到Django应用中不需要任何额外的依赖关系。 在本文中,您将学习如何通过扩展默认的...

    py3study

扫码关注云+社区

领取腾讯云代金券