跨子域使用localStorage

我正在使用可以支持它的浏览器上的localStoragereplacecookie(任何人,但IE)。 问题是site.comwwwsite.com存储他们自己的单独的localStorage对象。 我相信万维网被认为是一个子域(如果你问我这个愚蠢的决定)。 如果用户最初在site.com上,并决定inputwwwsite.com在她下次访问时,她的所有个人信息将无法访问。 如何让我所有的“子域名”与主域名共享相同的localStorage?

这是我如何跨域使用它…

  • 从您的父域使用iframe – say parent.com
  • 然后在每个child.com域上,只需要一个postMessage到你的parent.com iframe
  • 所有你需要做的是设置一个协议,如何解释你的postMessage消息与parent.com iframe交谈。

我希望它有助于:)

我build议将site.comredirect到www.site.com,以保持一致性并避免这样的问题。

另外,请考虑使用可以使用每个浏览器本机存储的PersistJS等跨浏览器解决scheme。

如果你正在为这个特定的问题使用iframe和postMessage解决scheme,我认为只是将数据存储在一个没有子域名的cookie中,可能不是那么简单(不pipe是代码方式还是计算方式) 在localStorage上加载,从cookie中抓取它

优点:

  • 不需要额外的iframe和postMessage设置。

缺点:

  • 将使数据跨所有子域(不仅仅是www),所以如果你不相信所有的子域,它可能不适合你。
  • 将每个请求发送到服务器的数据。 不是很好,但根据你的情况,可能还是比iframe / postMessage解决schemeless。
  • 如果你这样做,为什么不直接使用cookie? 取决于你的上下文。
  • 4K最大Cookie大小,跨域的所有cookie的总数(感谢Blake在评论中指出)

不过,我同意其他评论者的意见,这似乎应该是localStorage的一个可指定的选项,所以不需要变通办法。

我正在使用xdLocalStorage,这是一个轻量级的js库,它实现了LocalStorage接口,并通过使用iframe post消息通信来支持跨域存储(angularJS支持)

https://github.com/ofirdagan/cross-domain-local-storage

这是我为我的网站解决这个问题。 我没有www的所有网页redirect到www.site.com。 这样,它总是会采取本地存储www.site.com

将以下内容添加到您的.htacess ,(在根目录下创build一个,如果您已经没有)

 RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

您可以使用document.domain属性。 如果你把这个放在JavaScript的第一个动作中:

 document.domain="mysite.com";