-
26-09-2019 - |
题
我替饼干 本地存储 在浏览器就可以支持它的(任何人,但IE)。问题是 site.com 和 www.site.com 存储他们自己的独立的本地存储的对象。我相信www被认为是一个子(一个愚蠢的决定,如果你问我)。如果一个用户最初是在 site.com 并决定向类型 www.site.com 在她下次访问,她所有的个人数据将无法访问。我怎么得到我所有的"域"共享相同的本地存储的主要领域?
解决方案
这是我如何使用它跨领域...
- 使用一个框架,从你的父域的说parent.com
- 然后在每child.com 域,只要做一个问题给你的parent.com 框架
- 所有你需要做的就是设置一个协议如何解释你的问题的消息来帮你的parent.com 面.
我希望它有助于:)
其他提示
如果你使用的框架和问题解决方案只是为了这个特殊的问题,我认为这可能较少的工作(两码-明智和计算聪明的)只是 数据存储在一个子-小饼干,如果它不是已经在本地存储在载荷,抓住它从饼干.
赞成:
- 不需要额外的框架和问题设置的。
缺点:
- 将使数据可以在所有子域(不仅仅是www)所以,如果你不信任的所有子域,这可能不对你的工作。
- 将数据发送到服务器上的每一请求。不是很大,但这取决于你的情况下,也许仍然较少的工作于框架/问题的解决方案。
- 如果你这样做,为什么不只是使用的饼干?取决于你的上下文。
- 4K最大cookie大小,总共在所有饼干域(感谢布莱克指出这一意见)
我同意其他评论者虽然这看来似乎应该是一个可指定选择对本地存储使解决方法不是必需的。
我建议使site.com重定向到www.site.com用于一致性和用于避免这样的问题。
此外,考虑使用如 PersistJS 可使用每个浏览器天然一个跨浏览器溶液存储
我使用xdLocalStorage,这是一个轻量级JS库,它实现接口的localStorage并通过使用IFRAME交消息通信支持跨域存储。(angularJS支持)
这是我如何解决它为我的网站。我不重定向到WWW所有www.site.com页面。以此方式,将始终以www.site.com
的localStorage的以下内容添加到您的 .htacess 后,在根目录(创建一个如果你已经没有它)
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
您可以只使用document.domain
属性。如果你把这个在JavaScript中的第一个动作:
document.domain="mysite.com";
不隶属于 StackOverflow