在HTML5中,每个页面/域是否隔离了localStorage对象?

HTML5 localStorage对象是每个页面/域隔离的吗? 我想知道,因为我将如何命名localStorage密钥。 我需要一个单独的前缀吗? 或者我可以给他们什么名字?

这是每个域( 相同的起源策略相同的隔离规则),使每页必须使用基于location的密钥或其他方法。

不需要一个前缀,如果你需要,也可以使用前缀。 另外,是的,你可以任意命名。

是的,每个域/子域有一个不同的localStorage ,你可以调用任何你想要的密钥(不需要前缀)。

要获得密钥,您可以使用方法密钥(索引),如

 localStorage.key(0); 

有一个叫做globalStorage的对象,在那里你可以有多个localStorages,但是它已经被弃用了

我总是使用前缀,只是为了避免与用户脚本的潜在冲突 – 也可以使用localStorage。

商店是每个来源 ,其来源与相同来源策略 (模式[ httphttps等],端口和主机的组合)相同。 从规格 :

每个顶级浏览上下文都有一组独特的会话存储区域,每个来源一个。

因此, http://a.example.com的存储空间和http://b.example.com的存储空间是分开的(并且它们都与http://stackoverflow.com分开),因为这些都是不同的主机。 同样, http://example.com:80 http://example.com:8080 https://example.com http://example.com:80http://example.com:8080https://example.com都是不同的来源。

Web存储中没有内置的机制,允许一个来源访问另一个来源的存储。

请注意,这是 ,而不是url,所以http://example.com/page1http://example.com/page2都可以访问http://example.com的存储空间。

正如其他人所指出的,localStorage是唯一的协议,主机和端口。 如果你想要一个方便的方式来控制你的存储与前缀的键,我build议localDataStorage 。

它不仅可以帮助在同一个域中通过前缀键实施分段共享存储,还可以透明地存储javascript数据types(Array,Boolean,Date,Float,Integer,String和Object),提供轻量级数据混淆处理,自动压缩string便于按键(名称)查询以及按(键)值查询。

[免责声明]我是实用程序的作者[/免责声明]

例子:

 // instantiate our first storage object // internally, all keys will use the specified prefix, eg passphrase.life.key1 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, eg prismcipher.com.key1 var localData2 = localDataStorage( 'prismcipher.com' ); localData2.set( 'key1', 123456789 ) // integer localData2.get( 'key1' ) --> 123456789 

正如你所看到的,原始值是受到尊重的,你可以创build几个实例来控制你的存储。

Nickbuild议在该域中的任何地方都可以使用,作为另一种select,sessionStorage的作用略有不同,因为它与浏览器窗口本身是截然不同的。 也就是说,同一个域上的其他选项卡或窗口不能访问存储对象的同一副本。