在 iframe 中设置 cookie - 不同的域

Posted

技术标签:

【中文标题】在 iframe 中设置 cookie - 不同的域【英文标题】:Setting cookie in iframe - different Domain 【发布时间】:2011-01-08 04:52:53 【问题描述】:

我们将我们的网站作为 iframe 集成到另一个在不同域上运行的网站中。我们似乎无法设置cookies。有没有人遇到过这个问题?有什么想法吗?

【问题讨论】:

老问题,但如果您可以修改这两个网站,这是一个可行的建议:***.com/questions/18664395/… 【参考方案1】:

由于您的内容是从远程域加载到 iframe 中的,因此它被归类为第三方 cookie

绝大多数第三方 cookie 由广告商提供(这些通常被反恶意软件标记为跟踪 cookie),许多人认为它们侵犯了隐私。因此,大多数浏览器都提供了阻止第三方 cookie 的功能,这可能是您遇到问题的原因。

【讨论】:

如果您可以控制用户的浏览器设置,您可以通过让他们将第三方站点添加为“受信任站点”(至少对于 Windows)来解决 cookie 问题。受信任站点的默认安全设置应允许第三方 cookie。【参考方案2】:

从 2020 年 2 月 4 日的 Chromium 新更新(Chrome 80)开始。 Cookie 默认为 SameSite=Lax。据此link.

要解决此问题,您只需将 cookie 标记为 SameSite=None 和 Secure。

要了解什么是 Samesite cookie,请参阅document

【讨论】:

另一篇文章解释了这个medium.com/trabe/cookies-and-iframes-f7cca58b3b9e【参考方案3】:

在阅读了 Facebook 在 iframe 画布页面上的文档后,我想出了如何在具有不同域的 iframe 中设置 cookie。我在这里创建了一个概念验证 sinatra 应用程序:https://github.com/agibralter/iframe-widget-test

这里有更多关于 Facebook 如何做到这一点的讨论:How does Facebook set cross-domain cookies for iFrames on canvas pages?

【讨论】:

【参考方案4】:

在默认隐私设置下,IE 要求您先set a P3P policy,然后才能允许第三方框架设置 cookie。

据推测,P3P 允许用户限制将哪些信息传递给承诺以某种方式处理它的各方。在实践中,它几乎毫无价值,因为用户无法真正对他们想要的信息处理方式设置任何有意义的限制;最后,这只是一个相当统一的设置,充当了所有第三方都必须跳过的圈子,即使他们无意这样做,也会说“我会很好地处理你的个人信息”。

【讨论】:

为了在所有浏览器中工作,您需要 P3P + 我在回答中概述的策略。

以上是关于在 iframe 中设置 cookie - 不同的域的主要内容,如果未能解决你的问题,请参考以下文章

如何在 colorbox iframe 中设置图像的高度和宽度?

如何在 Flask 中设置 HTTPONLY cookie

iframe Safari 中的跨域 cookie

在PHP和JavaScript中设置Cookie会话存储(SessionStorage)和本地存储(LocalStorage)

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

在 iframe 内容中设置 document.domain 的安全隐患