我在通过弹出脚本的 chrome 扩展处理 cookie 时遇到一些问题。
popup.js 内容:
document.addEventListener('DOMContentLoaded', () => {
function cookieinfo() {
chrome.cookies.getAll({url: 'http://localhost:8080'}, function(cookie) {
console.log('Found cookie: ', cookie)
if (cookie == null)
return;
fetch('http://localhost:8080', {credentials: 'include'}).then((response) => {
// do some stuff
return response;
});
});
}
window.onload=cookieinfo;
}, false);
我执行的步骤:
- 登录到本地主机上的我的应用程序(所以我得到了cookie)
- 打开弹出窗口(因此执行 popup.js)
- 我在控制台日志中看到 chrome 发现了必要的 cookie
- 服务器说传入请求有空 cookie
- 我刷新本地主机应用程序的页面
- 我现在已退出
也许有人知道我做错了什么?
Edit:
看来是我的cookie有参数的原因HttpOnly=true
and SameSite=Lax
(相关链接 https://stackoverflow.com/a/37674900/5008606)。我可以在服务器日志中看到另一个cookie。但由于这个线程 https://stackoverflow.com/q/30013131/5008606所有 cookie 将被发送,如果credentials
参数设置为include
,甚至是 httpOnly cookie。我还尝试将其发送到 127.0.0.1 而不是 localhost,因为这个答案 https://stackoverflow.com/a/1188145/5008606结果相同。
我无法设置httpOnly
为假。这是框架强制的。有人知道如何修复它吗?
Edit2:
我终于安装了Cookie编辑器,发现SameSite=Lax
就是这个原因。如果我将其设置为No Restriction
然后我会在服务器端看到它。不幸的是,我使用的框架只允许Lax
and Strict
选项(Chrome 扩展程序均失败)。有谁知道如何从 Chrome 扩展程序发送 Lax cookie?
这是 Chromium 版本 77 之前的扩展的问题。当跨站点 cookie 设置为SameSite=Lax
or SameSite=Strict
,cookie 没有随跨站请求一起发送。
此问题已在所有平台的版本 78 中修复。现在 chrome 扩展程序会在以下情况下发送 cookieSameSite=Lax
or SameSite=Strict
.
参考:
https://bugs.chromium.org/p/chromium/issues/detail?id=1007973 https://bugs.chromium.org/p/chromium/issues/detail?id=1007973
https://chromium-review.googlesource.com/c/chromium/src/+/1827503 https://chromium-review.googlesource.com/c/chromium/src/+/1827503
https://bugs.chromium.org/p/chromium/issues/detail?id=617198 https://bugs.chromium.org/p/chromium/issues/detail?id=617198
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)