js写cookie的方案
iframe 页面和其父级页面在不同域的时候,如果iframe 页面需要写入Cookie,比如保存登录态,此时需要在写入的时候增加 SameSite=None;Secure;,方能写入成功。
上面是服务器在写cookie的时候需要处理 SameSite,那么如果页面内的 JavaScript 写 cookie,会发现也不能写入成功。
在一个跨域的内嵌页面测试如下图所示。

可以看到写入后,获取 Cookie为空,查看浏览器的 Cookie 面板,也没有发现刚才写入的内容,说明写入失败。
那么是否也需要在写入的时候增加和服务器一样的标识呢?

此时可以看到,Cookie 成功写入了。
服务器写cookie的方案
新版的Chrome下iframe内加载的页面无法写入Cookie,需要嵌入的站点在写Cookie的时候增加 SameSite=none 和 Secure=true。
对于 Express 站点,如果使用的是 express-session ,在其 1.17.0 版本后,支持了配置 sameSite=none,之前的版本是不支持的。

配置如下

测试效果

如果使用 nginx,可以配置 proxy_cookie_path。
location / {
# your usual config ...
# hack, set all cookies to secure, httponly and samesite (strict or lax)
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}
总结
在 iframe 跨域的场景下,无论是服务器,还是内嵌的页面,如果要写入 Cookie,都需要增加 SameSite=None;Secure;
转载请注明出处。本文地址: 跨域 iframe 内嵌页面 JavaScript 写 cookie 失败解决方法 - 前端路迹
在新版Chrome下,当iframe页面和父页面跨域时,需要设置Cookie的SameSite=None;Secure才能成功写入。无论是服务器端如Express使用express-session配置,还是页面内JavaScript尝试写Cookie,都需要添加这个标志。例如,使用nginx可以通过proxy_cookie_path配置SameSite属性。
2900

被折叠的 条评论
为什么被折叠?



