跨子域名使用session-storage

10

我有两个域名domain1.site.com和domain2.site.com,我已经在domain1.site.com中设置了session-storage,但是无法从同一标签页的另一个域名domain2.site.com获取session-storage。是否有其他方法可以用来识别在子域之间导航时所在的标签页?


1
首先,sessionStorage 无论如何都不能跨并发标签页使用,您可能需要使用 localStorage。其次,不行;它们属于不同的 _源_,因此它们不共享此内容。但是,您可以尝试使用 windowRef.postMessage 将数据从一个标签页传递到另一个标签页。 - Paul S.
2个回答

4
这个问题有点老了,但也许以下内容对其他人有所帮助。
有一种解决方案叫做“跨域本地存储”,它使用localStorage和postMessage的组合。这样,您就可以在任何域中使用存储。我知道两个项目:
- https://github.com/ofirdagan/cross-domain-local-storage - https://github.com/zendesk/cross-storage 但这不是一个会话存储。要分离多个选项卡,您必须生成一个唯一的ID(可能是选项卡创建日期的毫秒数),并将其保存到会话存储中,但只有第一次时才需要这样做,当会话存储中没有任何值时。这样,每个选项卡都有一个ID。您可以使用该ID将数据放入跨域本地存储中。

-3

正如@PaulS在他的评论中提到的那样,您很可能想使用localStorage

话虽如此,您仍然受到同源策略的限制。

如果您的示例是正确的,并且两个站点共享相同的顶级域名,例如:

domain1 .example.com
domain2 .example.com

那么您可以设置document.domain = "example.com";来允许它们共享信息。

有关更多详细信息,请参见MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/document.domain


1
@Paul,我正在寻找仅限于创建它的选项卡中的存储空间,因此我认为我们应该使用sessionStorage而不是localStorage来实现这个目的。我已经尝试将document.domain设置为一个公共顶级域并检查了sessionStorage,但没有成功。 - binfull
你正在使用哪两个域名?你将 document.domain 设置为什么?这种组合应该是有效的。 - Jeremy J Starcher
我已经按照你所提到的将 document.domain 设置为顶级域名,但我正在检查 sessionStorage。顺便说一下,我在 Chrome 上尝试过这个。 - binfull
我也尝试了,但没有成功。 - Dehli
完全不起作用:(。此外,您提供的链接未记录相同“document.domain”共享存储的行为。 - amanteaux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接