#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
#2 - 2024-1-5 20:01
(23年小结→bgm.tv/blog/330004)
好好好
#3 - 2024-1-5 20:03
(什么都看,什么都不懂)
真是这样的话,那sai老板不是动动手就修了……
#4 - 2024-1-5 20:05
(『一言以蔽之,就是「爱」!』)
我很久没掉过登陆了,这和浏览器有关吗?
#4-1 - 2024-1-5 20:09
小玉
某些情况下那个cookie的有效期会被重新设置了有效期,浏览器就不会掉登录状态,但是通过登录流程其实有问题。
插件原理也是手动设置了chii_auth的有效期,让其变成持久化的。
#5 - 2024-1-5 20:07
emm
我这里的这个,
Created:"Sun, 22 Oct 2023 15:23:23 GMT"
Expires / Max-Age:"Thu, 18 Jan 2024 23:49:17 GMT"
很久没有遇到过掉登录了
清了一下cookie重新登录了一下,自动给了一个月的有效期
所以这个问题似乎不太好重现啊
#5-1 - 2024-1-8 15:36
小玉
chii_auth 存在的情况下,登录状态基本上是不会掉;
chii_auth 不存在的情况,会根据网络IP和浏览器环境变化失效。

正常情况下,chii_auth 由登录操作服务端生成返回,生命周期为整个浏览器进程结束就会清理。
插件原理是更改 chii_auth 失效时间,手动处理为持久化的 Cooike,亲测UA和IP不管怎么变,就没有失效。
#6 - 2024-1-5 20:11
(白い雲は 流れ流れて)
感觉好简单,为啥SAI一直不修一下
#7 - 2024-1-5 20:15
本文仅供交流参考(bgm72),具体原因还请以实际情况为准(bgm86),狗头保命(bgm74)
#8 - 2024-1-5 20:21
(混沌邪恶中。。。)
@Sai🖖 嘟噜噜噜噜噜噜噜噜噜噜噜噜噜噜(发送电波中(bgm38))
#9 - 2024-1-5 20:23
(DD雷达搜寻中...?)
问问老板是不是这个原因(bgm38)
#10 - 2024-1-5 20:55
(眩しさだけは、忘れなかった)
好好好,不过sai老板要不要说点什么(bgm38)
#11 - 2024-1-6 05:18
(Life, what is it but a dream?)
直接用开发者工具改不是更简单点吗(bgm38)
#12 - 2024-1-6 08:20
自从知道有chii域名之后,就一直用chii了。
bgm 和bangumi域名似乎一直有:验证码问题,这个帖子中的问题
#13 - 2024-1-6 10:06
#14 - 2024-1-6 11:41
(闲杂人等)
mark(bgm38)
#15 - 2024-1-6 11:47
(xxsuneV)
虽然很久没掉过登录了,不过还是mark一下
#16 - 2024-1-6 11:51
(今日无事,勾栏听曲)
mark
#17 - 2024-1-6 11:58
(Do you hear the people sing?)
资瓷
虽然我固定ua之后就很少掉登录了(bgm38)
#18 - 2024-1-6 12:00
(情更怯)
刚刚测试了,改了 chii_auth 失效日期,User-Agent 变了还是掉登录。
测试浏览器1:一直没更新的Chrome。
测试浏览器2:Firefox 。清除 cookies 安装user.js,登录使用Firefox默认 UA,切换设置页面。修改 chii_auth 失效日期。F5刷新页面,页面正常。
然后使用扩展修改 UA 为 Chrome。静待一会刷新页面,登录丢失。

返回使用登录状态正常的测试浏览器1,未作任何修改。登录状态并不会丢失。

此外 我这里登录时默认 chii_auth 的有效期是一个月
#18-1 - 2024-1-8 15:33
小玉
我这里测试 chii_auth 存在的情况下,我用F12 改UA不管怎么变刷新后都不会掉。
#18-2 - 2024-1-8 18:44
拿月亮自刎
小玉 说: 我这里测试 chii_auth 存在的情况下,我用F12 改UA不管怎么变刷新后都不会掉。
看网络请求 UA 的方法是,打开开发者工具  --> network ---> headers  ->  request headers ---->  user-agent

navigator.userAgent  打印的是浏览器 UA,这个是只读属性,不能修改,也不一定不是请求的 UA。

你装个 Header Editor 或者 User-Agent Switcher and Manager 改了 UA 后,再看网络请求的 UA,就知道变化了。
UA 变了立刻刷新是不会掉登录的,关了浏览器等个10分钟左右,就会掉登录。
#18-3 - 2024-1-8 19:53
小玉
拿月亮自刎 说: 看网络请求 UA 的方法是,打开开发者工具  --> network ---> headers  ->  request headers -...
F12开发者工具,可以直接修改浏览器UA 的(直接打开响应式设计模式即可),并不需要额外安装脚本,navigator.userAgent 也会变,所有的网络请求都是用的修改后的UA;
还是没有掉状态,我测试过好多次了,你可以在你的浏览器Cookie Manger 里面看有没有 chii_auth,没有的话关闭浏览器等10多分钟改了UA是会掉的,有 chii_auth 不会掉。
#18-4 - 2024-1-8 20:05
拿月亮自刎
小玉 说: F12开发者工具,可以直接修改浏览器UA 的(直接打开响应式设计模式即可),并不需要额外安装脚本,navigator.userAgent 也会变,所有的网络请求都是用的修改后的UA;
还是没有掉状态,...
我也测试过很多次了。改 cookies 过期时间,对于网站肯定有效。但是改 UA 后,Bangumi 肯定是会掉登录的。
最常见的掉登录场景就是浏览器自动更新。自从不更新浏览器后基本不掉登录。
#18-5 - 2024-1-9 01:07
bangumi大西王
ua变了是一定会掉登录的。
#18-6 - 2024-1-9 15:06
Venusxx
Trim21 说: ua变了是一定会掉登录的。
+1
#18-7 - 2024-1-9 15:22
拿月亮自刎
小玉 说: F12开发者工具,可以直接修改浏览器UA 的(直接打开响应式设计模式即可),并不需要额外安装脚本,navigator.userAgent 也会变,所有的网络请求都是用的修改后的UA;
还是没有掉状态,...
https://github.com/zhifengle/blo ... er/bgm-demo/main.go

用 Golang 写了一个循环打印在线人数的测试工具。每10分钟,切换 UA 调用一次。
登录掉后,就不能打印出在线人数了。
跑了两次,UA 变化后,就无法打印人数了
#18-8 - 2024-1-9 17:39
小玉
拿月亮自刎 说: https://github.com/zhifengle/blo ... er/bgm-demo/main.go

用 Golang 写了一个循环打印在线人数的测试工具。每10分钟,切换 UA 调用一...
我用你的脚本测试了,还是没发现问题。


在浏览器和终端都是第一个网络环境下,没有挂代理。测试了 UA改了依然能保持登录获取在线人数。

我猜测你测试掉登录状态的原因可能是下面的原因:

1、是否携带了chii_auth cookie;
2、每次请求如果响应头有 set-cookie,你的脚本没有处理,导致下次请求某些cookie依然是旧的;
3、脚本执行期间是否在其它环境浏览了bgm的网站(可能会导致chii_sid刷新,但是脚本未处理);
4、cookie 生成的网络环境是否和脚本运行的网络环境一致,不一致需要按步骤2处理,否则也会失效;

你的脚本每次读取的都是固定的cookie,在chii_sid有刷新时,会导致失效。
#18-9 - 2024-1-9 20:38
拿月亮自刎
小玉 说: 我用你的脚本测试了,还是没发现问题。


在浏览器和终端都是第一个网络环境下,没有挂代理。测试了 UA改了依然能保持登录获取在线人数。

我猜测你测试掉登录状态的原因可能是下面的原因:

1、是否携带...
1. 没问题
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 变化。
#19 - 2024-1-8 18:51
(我们的头脑比天空更广阔)
mark
#20 - 2024-1-8 18:57
maerk
#21 - 2024-1-9 01:03
mark
#22 - 2024-1-9 14:43
(都是异端!)
难以想象这是2024年的楼
有一种我第一次看雪糕围棋教程的感觉(全是褒义)
为什么会有如此友好贴心的教程
看着甚至有点感动
#23 - 2024-1-9 16:32
(没有想好要成为什么样的大人)
雅,善
#24 - 2024-1-9 20:40
PC端不大容易掉,要掉其他部分网站一起掉
#25 - 2024-3-19 17:11
mark
#26 - 2024-3-19 17:13
(亡死来招会但人迷爱可然虽我。)
我用iPhone很少掉登录啊,只有每次升级系统的时候会掉。
#27 - 2024-3-27 02:34
(VIP已到期,请尽快续费)
js能改cookie,太不安全了,建议大西王修复 (bgm24)
#28 - 2024-4-6 19:58
(未来をつくろう)
梳理得很清楚了
#29 - 2024-5-2 00:02
#30 - 2024-5-2 00:28
史 诗 级 修 复