我正在支持cookie的浏览器(IE以外的任何人)上用localStorage替换cookie 。问题是site.com和www。site.com存储它们自己的单独的localStorage对象。我认为www被视为一个子域(如果您问我这是一个愚蠢的决定)。如果用户最初在site.com上并决定输入www。下次访问site.com时,将无法访问她的所有个人数据。如何使我的所有“子域”与主域共享相同的localStorage?
我正在支持cookie的浏览器(IE以外的任何人)上用localStorage替换cookie 。问题是site.com和www。site.com存储它们自己的单独的localStorage对象。我认为www被视为一个子域(如果您问我这是一个愚蠢的决定)。如果用户最初在site.com上并决定输入www。下次访问site.com时,将无法访问她的所有个人数据。如何使我的所有“子域”与主域共享相同的localStorage?
Answers:
这就是我跨域使用它的方式...
希望对您有所帮助:)
site.com
/ www.site.com
只要子域位于相同的父域上
如果您仅针对此特定问题使用iframe和postMessage解决方案,我认为将数据存储在无子域的Cookie中(如果尚未将其存储的话)可能会少一些(无论是代码方面还是计算方面)在有负载的localStorage中,从cookie中获取它。
我同意其他评论者的意见,但这似乎应该是localStorage的指定选项,因此不需要变通办法。
我建议使site.com重定向到www.site.com,以保持一致性并避免此类问题。
另外,考虑使用可以使用每个浏览器本机存储的跨浏览器解决方案(如PersistJS)。
Location
,通过<meta>
HTML标记甚至通过JS window.location
。
我正在使用xdLocalStorage,这是一个轻量级的js库,它实现了LocalStorage接口,并通过使用iframe发布消息通信来支持跨域存储。(angularJS support)
这种解决方案会引起很多这样的问题。出于一致性和SEO考虑,在主域上重定向是最佳解决方案。
在服务器级别进行重定向
如何使用Nginx将www重定向到非www
或 其他任何类似路线53的级别(如果正在使用)
这就是我为网站解决的方法。我将所有没有www的页面重定向到了www.site.com。这样,它将始终占用www.site.com的本地存储
将以下内容添加到根目录中的.htacess中(如果尚未创建,请创建一个)
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]