iframe 中的页面没有看到自己的 cookie

Posted

技术标签:

【中文标题】iframe 中的页面没有看到自己的 cookie【英文标题】:Page within iframe not seeing its own cookies 【发布时间】:2021-10-17 15:23:58 【问题描述】:

我有一个有趣的困境。

我们在不同的域上有 2 个网站。为简单起见,假设它们是:

“App”:在main-app.com/app 上运行的 SPA 应用程序 “主机”:在random-site.com/index.html 上运行的简单 index.html 页面。 index.html 页面仅包含一个显示应用程序的 iframe(指向 main-app.com/app)。

当我作为用户访问应用程序 (main-app.com/app) 并在那里登录时,它会在我的浏览器中设置一个会话 cookie,用于识别会话。但是,当我转到主机页面 (random-site.com/index.html) 并加载应用程序的 iframe 时,不会发送会话 cookie。当我在网络检查器中查看它时,它只是被省略了。

为什么会发生这种情况?是什么阻止了 cookie 被发送,我们如何解决这个问题?

(我们可以控制两个网站)

【问题讨论】:

【参考方案1】:

您使用的是谷歌浏览器吗? 在 Google Chrome 中,cookie 的默认属性已更改为 samesite=lax。 samesite=lax cookie 不在 iframe 中发送。此更改的目的是减轻 CSRF 等攻击。 如果您使用 Firefox,您仍然应该在 iframe 中的页面上登录。

【讨论】:

我正在使用 Chrome... 我将在哪里/如何覆盖此参数? 你可以通过添加属性samesite=none;来覆盖这个参数。安全到 cookie。设置 Cookie:SESSIONID=XXXXXXXX;路径=/;安全的;相同站点=无; 太棒了。这是确切的问题(在 Firefox 中完美运行),我什至不知道在哪里看;花了一天时间,你为我节省了大量时间。非常感谢!

以上是关于iframe 中的页面没有看到自己的 cookie的主要内容,如果未能解决你的问题,请参考以下文章

iframe Safari 中的跨域 cookie

iframe 内的 iframe 以访问自己的 cookie

利用cookie实现iframe刷新时停留在当前页面

IE、P3P、IFrame 和阻止的 cookie(在页面主机页面请求个人信息之前有效)

无法访问 iframe 中加载的自己域上的 httponly 标记 cookie

Facebook 如何在画布页面上为 iFrame 设置跨域 cookie?