跨子域使用localStorage
我正在使用可以支持它的浏览器上的localStoragereplacecookie(任何人,但IE)。 问题是site.com和www 。 site.com存储他们自己的单独的localStorage对象。 我相信万维网被认为是一个子域(如果你问我这个愚蠢的决定)。 如果用户最初在site.com上,并决定inputwww 。 site.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支持)
这是我为我的网站解决这个问题。 我没有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";