[英]In HTML5, is the localStorage object isolated per page/domain?
HTML5 localStorage对象是否按页面/域隔离? 我想知道是因为我将如何命名localStorage键。 我需要一个单独的前缀吗? 还是我可以随便给他们命名?
它是基于域和端口的(与相同的原始策略相同的隔离规则),要使其成为每页,您必须使用基于location
的密钥或其他方法。
您不需要前缀,但是如果需要则使用前缀。 另外,是的,您可以随意命名。
存储按来源进行存储,其中“来源”与“ 相同来源策略 ” 相同 (模式[ http
与https
等],端口和主机的组合)。 从规格 :
每个顶级浏览上下文都有一组唯一的会话存储区域,每个来源存储一个。
因此, http://a.example.com
的存储和http://b.example.com
的存储是分开的(并且它们都与http://example.com
分开),因为它们都是不同的主机。 同样, http://example.com:80
http://example.com:8080
https://example.com
http://example.com:80
和http://example.com:8080
和https://example.com
都是不同的来源。
Web存储中没有内置机制允许一个来源访问另一来源。
请注意,它是来源 ,而不是URL,因此http://example.com/page1
和http://example.com/page2
都可以访问http://example.com
的存储。
是的,每个域/子域都有一个不同的localStorage ,您可以随意调用键(不需要前缀)。
要获取密钥,可以使用key(index)方法,例如
localStorage.key(0);
在您可以拥有多个localStorage之前,有一个名为globalStorage的对象,但已从规范中弃用了该对象。
正如其他人指出的那样,localStorage在每个协议,主机和端口上都是唯一的。 如果您希望使用方便的方法来控制带有前缀键的存储,建议您使用localDataStorage 。
它不仅可以通过在前缀上加前缀来帮助在同一域中强制执行分段共享存储,还可以透明地存储javascript数据类型(数组,布尔值,日期,浮点数,整数,字符串和对象),提供轻量级的数据混淆,自动压缩字符串以及便于按键(名称)查询以及按(键)值查询。
[免责声明]我是实用程序[/免责声明]的作者
例子:
// instantiate our first storage object
// internally, all keys will use the specified prefix, i.e. passphrase.life
var localData = localDataStorage( 'passphrase.life' );
localData.set( 'key1', 'Belgian' )
localData.set( 'key2', 1200.0047 )
localData.set( 'key3', true )
localData.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } )
localData.set( 'key5', null )
localData.get( 'key1' ) --> 'Belgian'
localData.get( 'key2' ) --> 1200.0047
localData.get( 'key3' ) --> true
localData.get( 'key4' ) --> Object {RSK: Array(5)}
localData.get( 'key5' ) --> null
// instantiate our second storage object
// internally, all keys will use the specified prefix, i.e. prismcipher.com
var localData2 = localDataStorage( 'prismcipher.com' );
localData2.set( 'key1', 123456789 ) // integer
localData2.get( 'key1' ) --> 123456789
如您所见,原始值受到尊重,并且您可以创建几个实例来控制您的存储。
我总是使用前缀,只是为了避免与用户脚本发生潜在冲突-也可以使用localStorage。
正如Nick所建议的,它可以在该域的任何地方使用,作为替代方案,sessionStorage的工作方式略有不同,因为它与浏览器窗口本身不同。 也就是说,同一域上的其他选项卡或窗口无法访问该存储对象的同一副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.