我在通过弹出脚本的 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
- 我刷新本地主机应用程序的页面
- 我现在退出了
也许有人知道我做错了什么?
编辑:
看来原因是我的 cookie 有参数 HttpOnly=true
和 SameSite=Lax
( related link )。我可以在服务器日志中看到另一个 cookie。但由于 this thread如果 credentials
参数设置为 include
,将发送所有 cookie,甚至是 httpOnly cookie。由于 this answer,我还尝试将它发送到 127.0.0.1 而不是本地主机结果相同。
我无法将 httpOnly
设置为 false。这是框架强制的。有人知道如何解决吗?
编辑2:
我终于安装了 Cookie 编辑器,发现是 SameSite=Lax
的原因。如果我将它设置为 No Restriction
,那么我将在服务器端看到它。不幸的是,我使用的框架只允许 Lax
和 Strict
选项(Chrome 扩展失败了)。有谁知道如何从 Chrome 扩展程序发送 Lax cookies?
最佳答案
这是 Chromium 77 版之前的扩展问题。当跨站点 cookie 设置为 SameSite=Lax
或 SameSite=Strict
时,不会发送 cookie与跨站请求。
此问题已在所有平台的版本 78 中得到修复。现在,Chrome 扩展在 SameSite=Lax
或 SameSite=Strict
时发送 cookie。
引用资料:
https://bugs.chromium.org/p/chromium/issues/detail?id=1007973
https://chromium-review.googlesource.com/c/chromium/src/+/1827503
https://bugs.chromium.org/p/chromium/issues/detail?id=617198
关于javascript - Chrome 扩展程序不发送 SameSite=Lax cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51731231/