#1 - 2024-1-5 19:50
小玉
Hello,大家晚上好呀!
我是小玉(Bangumi for Android 原生安卓客户端的开发者,具体了解戳这里 https://bgm.tv/group/topic/391651)
今天我来为大家揭秘为什么你的浏览器老是掉登录状态,以及罪魁祸首的真正的原因 和修复超合金插件。
在此之前,想必在看的各位 Bgmer 也遇到过或经常遇到每天都打开浏览器,激动的打开 bgm 看看哪些剧集更新了,结果页面一点开两个冰冷的的登录框框显示在那,每次都没勾选不保存我的登录信息,结果每次打开浏览器,登录状态都没了,是不是很生气😠。
首先咱来分析分析,我的登录状态为什么会丢失?
想必大家之前也浏览过许多 Bgmer 写过关于登录状态丢失的帖子,有认为是 IP 地址 变了导致的登录失效,有认为是 浏览器 UA 变了导致的登录失效,还有些其它的分析。结果后来测试发现,其实这些都是影响登录状态失效的原因,但还有一个额外的方法可以在这些信息变化后保持登录状态,即有重新刷新当前环境的方法。
先给小白科普一下什么是Cookie,以及浏览器如何识别是我在浏览,而不是隔壁老王。
Cookie 是什么?
Cookie就像一张小纸条,是网站给你电脑上放的一点信息。这个信息可以告诉网站一些关于你的事情,比如你上次访问的时间、你喜欢的颜色等。
浏览器怎么识别用户身份的?
当你第一次访问一个网站时,它会给你电脑上放一个小纸条,上面有一个特殊的标记,就像是一个身份证号码。以后你再访问这个网站时,浏览器会把这个小纸条带上,告诉网站“嘿,我是之前那个人”,这样网站就知道你是谁了。
Cookie 有效期是什么意思?
小纸条上有一个日期写着,就像食品上的保质期一样。如果过了这个日期,浏览器就不再带着这个小纸条去访问网站。这时候,网站可能会要求你重新登录,就好像你需要重新出示身份证一样。这个有效期有时很短,有时很长,取决于网站的设置。
明白了 Cookie 这个东东后,废话不多说,接下来作为一位技术人员为大家分析,接下来直接上干货!
1、首先清理浏览器数据,打开 BGM 登录页面 https://bgm.tv/login,此时 Cookie 如下:
2、然后登录,登录成功后,再查看 Cookie 如下:
此时睿智的你发了问题所在了吗?是的没错,就是这个名为 chii_auth 的 Cookie 有猫腻,它的有效期仅在会话期间!这里给不懂得小伙伴科普下,有效为会话的 Cookie 会在浏览器关闭后自动清理掉。
正常情况这个 Cookie 有效期应该和其它的 Cookie 一致,大约为一年左右,由于这里有效期仅在会话期间,所有每当你的浏览器进程关闭时,这个 Cookie 就被清理了,下次打开浏览器,没有这个名为 chii_auth 的 Cookie,服务端只能验证 chii_sid 这个 Cookie,但是这个 Cookie 的有效期只有 7 天(实际上服务端校验后比这个更短),就会导致无法刷新验证,而且这个会根据你的IP地址或浏览器环境变化等立即失效。
经过多次实验,这个名为 chii_auth 的 Cookie实际上是刷新身份有效期的关键,即使没有这个 chii_sid Cookie,也会重新生成。
经过上面的分析,至此浏览器间隔性登录失效的原因找到了,可能是因为网络环境变化,且你的浏览器本地 Cookie 管理内没有有效的 chii_auth。
接下来咱分析分析为什么这个名为 chii_auth 的 Cookie 有效期被设置为了仅会话期间,
咱仔细看下这个名为 chii_auth 的 Cookie 在哪个请求后返回的,在登录流程的 FollowTheRabbit 这个请求响应体内,发现了该 Cookie。
(ÒωÓױ)!熟悉技术的小伙伴应该早早知道了原因,就是因为这个 chii_auth Cookie,在这个登录请求返回后,没有设置有效期,浏览器会将此类 Cookie 的有效期默认设置为仅会话期间,所以就出现了前面讲的困扰大家许久的问题(当然网站可能就是这样设计的,并且网络或浏览器环境变化需要重新登录),但是由于用户携带的笔记本等网络环境可能经常变化,所以会老掉登录状态。
解决方案(超大声!)
今天我为大家带来了一款超合金插件【登录持久化插件】【审核中,有点慢】,动动小手指,轻轻松松解决困扰了你许久的问题,快来试试叭!
其原理就是给 chii_auth 手动设置一个过期时间,让其在浏览器进程结束时不清理掉,后续即使网络环境变化了,chii_auth 存在也可以保持登录状态。
来不及等待审核的小伙伴可以自己复制代码创建一个插件。
脚本开源地址: 传送门
使用教程:
1、在超合金组件内成功启用该组件;
2、然后退出登录(对的,就是退出登录),重新打开登录页面并登录;
3、重新登录成功后,在隐私设置页面 https://bgm.tv/settings/privacy 勾选持久化并保存,到此即可完成登录信息持久化。
是不是很简单,快来试试吧!
注意:每次重新登录后,都需要进入隐私设置页面,重新选择持久化并保存(不管默认是否选中的持久化)。
题外话:我还开发了一款全功能的 Bangumi for Anddroid 原生安卓客户端,超超超流畅,完全开源欢迎大家 Star 和使用。
帖子传送门:https://bgm.tv/group/topic/391651
开源地址:https://github.com/xiaoyvyv/Bangumi-for-Android
我是小玉(Bangumi for Android 原生安卓客户端的开发者,具体了解戳这里 https://bgm.tv/group/topic/391651)
今天我来为大家揭秘为什么你的浏览器老是掉登录状态,以及罪魁祸首的真正的原因 和修复超合金插件。
在此之前,想必在看的各位 Bgmer 也遇到过或经常遇到每天都打开浏览器,激动的打开 bgm 看看哪些剧集更新了,结果页面一点开两个冰冷的的登录框框显示在那,每次都没勾选不保存我的登录信息,结果每次打开浏览器,登录状态都没了,是不是很生气😠。
首先咱来分析分析,我的登录状态为什么会丢失?
想必大家之前也浏览过许多 Bgmer 写过关于登录状态丢失的帖子,有认为是 IP 地址 变了导致的登录失效,有认为是 浏览器 UA 变了导致的登录失效,还有些其它的分析。结果后来测试发现,其实这些都是影响登录状态失效的原因,但还有一个额外的方法可以在这些信息变化后保持登录状态,即有重新刷新当前环境的方法。
先给小白科普一下什么是Cookie,以及浏览器如何识别是我在浏览,而不是隔壁老王。
Cookie 是什么?
Cookie就像一张小纸条,是网站给你电脑上放的一点信息。这个信息可以告诉网站一些关于你的事情,比如你上次访问的时间、你喜欢的颜色等。
浏览器怎么识别用户身份的?
当你第一次访问一个网站时,它会给你电脑上放一个小纸条,上面有一个特殊的标记,就像是一个身份证号码。以后你再访问这个网站时,浏览器会把这个小纸条带上,告诉网站“嘿,我是之前那个人”,这样网站就知道你是谁了。
Cookie 有效期是什么意思?
小纸条上有一个日期写着,就像食品上的保质期一样。如果过了这个日期,浏览器就不再带着这个小纸条去访问网站。这时候,网站可能会要求你重新登录,就好像你需要重新出示身份证一样。这个有效期有时很短,有时很长,取决于网站的设置。
明白了 Cookie 这个东东后,废话不多说,接下来作为一位技术人员为大家分析,接下来直接上干货!
1、首先清理浏览器数据,打开 BGM 登录页面 https://bgm.tv/login,此时 Cookie 如下:
2、然后登录,登录成功后,再查看 Cookie 如下:
此时睿智的你发了问题所在了吗?是的没错,就是这个名为 chii_auth 的 Cookie 有猫腻,它的有效期仅在会话期间!这里给不懂得小伙伴科普下,有效为会话的 Cookie 会在浏览器关闭后自动清理掉。
正常情况这个 Cookie 有效期应该和其它的 Cookie 一致,大约为一年左右,由于这里有效期仅在会话期间,所有每当你的浏览器进程关闭时,这个 Cookie 就被清理了,下次打开浏览器,没有这个名为 chii_auth 的 Cookie,服务端只能验证 chii_sid 这个 Cookie,但是这个 Cookie 的有效期只有 7 天(实际上服务端校验后比这个更短),就会导致无法刷新验证,而且这个会根据你的IP地址或浏览器环境变化等立即失效。
经过多次实验,这个名为 chii_auth 的 Cookie实际上是刷新身份有效期的关键,即使没有这个 chii_sid Cookie,也会重新生成。
经过上面的分析,至此浏览器间隔性登录失效的原因找到了,可能是因为网络环境变化,且你的浏览器本地 Cookie 管理内没有有效的 chii_auth。
接下来咱分析分析为什么这个名为 chii_auth 的 Cookie 有效期被设置为了仅会话期间,
咱仔细看下这个名为 chii_auth 的 Cookie 在哪个请求后返回的,在登录流程的 FollowTheRabbit 这个请求响应体内,发现了该 Cookie。
(ÒωÓױ)!熟悉技术的小伙伴应该早早知道了原因,就是因为这个 chii_auth Cookie,在这个登录请求返回后,没有设置有效期,浏览器会将此类 Cookie 的有效期默认设置为仅会话期间,所以就出现了前面讲的困扰大家许久的问题(当然网站可能就是这样设计的,并且网络或浏览器环境变化需要重新登录),但是由于用户携带的笔记本等网络环境可能经常变化,所以会老掉登录状态。
解决方案(超大声!)
今天我为大家带来了一款超合金插件【登录持久化插件】【审核中,有点慢】,动动小手指,轻轻松松解决困扰了你许久的问题,快来试试叭!
其原理就是给 chii_auth 手动设置一个过期时间,让其在浏览器进程结束时不清理掉,后续即使网络环境变化了,chii_auth 存在也可以保持登录状态。
来不及等待审核的小伙伴可以自己复制代码创建一个插件。
脚本开源地址: 传送门
使用教程:
1、在超合金组件内成功启用该组件;
2、然后退出登录(对的,就是退出登录),重新打开登录页面并登录;
3、重新登录成功后,在隐私设置页面 https://bgm.tv/settings/privacy 勾选持久化并保存,到此即可完成登录信息持久化。
是不是很简单,快来试试吧!
注意:每次重新登录后,都需要进入隐私设置页面,重新选择持久化并保存(不管默认是否选中的持久化)。
题外话:我还开发了一款全功能的 Bangumi for Anddroid 原生安卓客户端,超超超流畅,完全开源欢迎大家 Star 和使用。
帖子传送门:https://bgm.tv/group/topic/391651
开源地址:https://github.com/xiaoyvyv/Bangumi-for-Android
插件原理也是手动设置了chii_auth的有效期,让其变成持久化的。
chii_auth 不存在的情况,会根据网络IP和浏览器环境变化失效。
正常情况下,chii_auth 由登录操作服务端生成返回,生命周期为整个浏览器进程结束就会清理。
插件原理是更改 chii_auth 失效时间,手动处理为持久化的 Cooike,亲测UA和IP不管怎么变,就没有失效。
navigator.userAgent 打印的是浏览器 UA,这个是只读属性,不能修改,也不一定不是请求的 UA。
你装个 Header Editor 或者 User-Agent Switcher and Manager 改了 UA 后,再看网络请求的 UA,就知道变化了。
UA 变了立刻刷新是不会掉登录的,关了浏览器等个10分钟左右,就会掉登录。
还是没有掉状态,我测试过好多次了,你可以在你的浏览器Cookie Manger 里面看有没有 chii_auth,没有的话关闭浏览器等10多分钟改了UA是会掉的,有 chii_auth 不会掉。
最常见的掉登录场景就是浏览器自动更新。自从不更新浏览器后基本不掉登录。
用 Golang 写了一个循环打印在线人数的测试工具。每10分钟,切换 UA 调用一次。
登录掉后,就不能打印出在线人数了。
跑了两次,UA 变化后,就无法打印人数了
在浏览器和终端都是第一个网络环境下,没有挂代理。测试了 UA改了依然能保持登录获取在线人数。
我猜测你测试掉登录状态的原因可能是下面的原因:
1、是否携带了chii_auth cookie;
2、每次请求如果响应头有 set-cookie,你的脚本没有处理,导致下次请求某些cookie依然是旧的;
3、脚本执行期间是否在其它环境浏览了bgm的网站(可能会导致chii_sid刷新,但是脚本未处理);
4、cookie 生成的网络环境是否和脚本运行的网络环境一致,不一致需要按步骤2处理,否则也会失效;
你的脚本每次读取的都是固定的cookie,在chii_sid有刷新时,会导致失效。
2. 有可能。但是解释不了浏览器掉登录
3. 有可能
4. 网络确实变了
测试脚本确实不严谨
又用浏览器测试了一下, IP 变化加上 UA 变化,大概率掉登录。
IP 变化会触发 set-cookie ,chii_sid 变化
重新用 Python 写的测试脚本。随机 IP 没加。
https://gist.github.com/zhifengl ... 8bf0a4ff56f72f7151a
只是UA变化,没测试出掉登录。
总结一下以前掉登录的原因:
1. IP 变化。家庭宽带 IP 不是固定的,还有用手机登录,手机的 IP 也会变化。
2. 浏览器自动更新 UA 变化。