2021/10/10 更新:
⛔请注意!⛔
此方法在最新版 Chrome 94 上已无效
上周五早上一打开电脑准备开发项目时候, 突然发现网站登录跳转有异常, 怎么都登录不上一直跳回登录页. 通过抓包排除了后端的原因后, 发现后端的set-cookie没有效果, 突然想起Chrome禁用第三方Cookies的计划, 打开Edge的更新记录发现已经自动更新到Chromium 91了.
迅速找到Chromium的更新日志(Mar 18, 2021)
The flags #same-site-by-default-cookies and #cookies-without-same-site-must-be-secure have been removed from chrome://flags as of Chrome 91, as the behavior is now enabled by default. In Chrome 94, the command-line flag --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure will be removed.
因为开发环境需要, 我们把浏览器的same-site-by-default-cookies
和cookies-without-same-site-must-be-secure
两项都在flag里禁用了. 但是更新到91版本后, Chromium直接把选项给关了而且设置成默认开启, 那就没办法在flag里设置了.
但是文中还写了"In Chrome 94, the command-line flag --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure will be removed", 也就是说这个SameSiteByDefaultCookies
和CookiesWithoutSameSiteMustBeSecure
还没有被移除, 但是这个所谓的command-line flag
是个什么东西呢?
这个command-line flag
是指在启动Choromium时所带的参数, 在windows中可以通过修改应用的快捷方式目标属性来给启动的应用加上参数.
Chromium支持的command-line flag, 具体操作过程如下:
-
在右击Chrome/Edge的快捷方式, 点击"属性".
-
在"目标(Target)"属性中末尾加上
--disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure
然后重启浏览器就可以了. 但是这种办法不是long term solution, Chromium 94后会连comman-line的方式也移除, 按照官方的说法是因为如果任由开发者禁用这两个选项, 开发者就会变成容易被攻击的目标. 因此为了保护开发者, Chromium选择逐渐关闭这个通道.
以后如果要在开发环境作业, 老老实实上https也许是最简单的一种办法.
6/10 更新:
评论下有问到http页面请求https跨站cookie携带问题的, 除了用command-line的方法, 可以在flag里把Schemeful Same-Site
这个选项禁用掉试试. 详细的原理可以查看这篇文章的Schemeful Same-Site部分.
评论下有问到Mac系统怎么解决.
首先关闭浏览器, 打开终端输入以下指令:
open -a "Google Chrome" --args --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure
如果是Edge的话则是:
open -a "Microsoft Edge" --args --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure