gpt4 book ai didi

javascript - Safari LocalStorage 不在同一域上托管的 IFrame 之间共享

转载 作者:行者123 更新时间:2023-12-01 16:24:37 30 4
gpt4 key购买 nike

我们正在开发托管在同一域的两个不同子域上的两个 Web 应用程序:

  • https://subDomainA.domain.com
  • https://subDomainB.domain.com

  • 两个 Web 应用程序显示 iFrame 托管在第三个子域上:
  • https://subDomainC.domain.com

  • 我们正在使用 postMessage在顶部窗口和 IFrame 窗口之间进行通信。
    上显示的 iFrame 内子域A ,我们正在设置一个 AuthToken: localStorage.setItem("AuthToken", "JWTAuthToken")当我们导航到 子域B 并尝试在 iFrame 中运行以下代码: localStorage.getItem("AuthToken")结果是 null .
  • 这只发生在 Safari 浏览器中。
  • 所有其他浏览器 分享 这些 IFrame 中的 LocalStorage

  • 我们在同一个域上,即同一个“eTLD+1”(domain.com)
  • 用 cookie 做同样的事情 作品! .只是不使用 LocalStorage
  • 开业子域C 直接在浏览器中设置数据也会为 IFrame 保留它们。

  • 这是 Safari 的固有行为还是我们的实现有问题?

    最佳答案

    这是 Safari 中的预期行为。 Safari 的智能跟踪保护 (ITP) 根据顶部框架对浏览器存储进行分区。下面是 WebKit 的文档解释它的方式:
    分区是一种技术,允许第三方使用存储和有状态的 Web 功能,但每个第一方网站都有这些功能。假设 adtech.example 是 news.example 和 blog.example 下的第三方,并且 adtech.example 使用 LocalStorage。使用分区的 LocalStorage,adtech.example 将在 news.example 和 blog.example 下获得唯一的存储实例,这消除了通过 LocalStorage 进行跨站点跟踪的可能性。
    引用:
    https://webkit.org/tracking-prevention/#partitioned-third-party-localstorage
    Iframe localStorage on Safari and Safari mobile
    用稍微通俗一点的英语,https://github.com/zendesk/cross-storage说:
    Safari 7+(OSX、iOS)的注意事项
    Safari 7+ 默认禁用所有跨域本地存储访问。这是“阻止 cookie 和其他网站数据”隐私设置设置为“From third parties and advertisers”的结果。任何跨存储客户端代码都不会崩溃,但是,它只能访问沙盒、隔离的本地存储实例。因此,以前由其他来源设置的任何数据都无法访问。如果可以选择,可以回退到为这些用户代理使用根 cookie,或者从服务器端存储请求数据。
    这可能有用:
    https://webkit.org/blog/8124/introducing-storage-access-api/

    关于javascript - Safari LocalStorage 不在同一域上托管的 IFrame 之间共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63922558/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com