sessionStorage和localStorage的范围


105

我阅读了有关sessionStorage和localStorage的一些文档,但是我不明白范围是什么:域,特定页面?

例如,如果我有以下页面:

http://example.com/products.aspx?productID=1

http://example.com/products.aspx?productID=2

http://example.com/services.aspx?serviceID=3

并且如果在上述每个页面上运行(idvalue是查询字符串中的值):

localStorage.setItem('ID',idvalue);

我最终会存储3个不同的值,还是两个值会互相覆盖?

Answers:


87

这些值将互相覆盖。每个密钥名称对对于协议和域而言都是唯一的,而与路径无关。

可以通过document.domain属性更改受影响的域。

  • sub.example.com-> example.com可以(子域)
  • sub.example.com-> other.example.com不可能

谢谢!您是否有推荐参考,详细解释了localStorage?
Christophe

2
@Christophe MDN:存储W3c:Web存储
罗布W

1
好吧,即使阅读了MDN页面,我仍然找不到我的问题的答案...无论如何,再次感谢!
Christophe

1
@Christophe我已经通过webappsstore.sqlite使用query查看Firefox配置文件目录中调用的sqlite(3)数据库来验证我的陈述SELECT scope FROM webappsstore2;。结果是域的反向,后跟非反向协议,并带有端口,例如:gro.allizom.snodda.secivres.:https:443。如您所见,这里没有提到任何路径。
罗布W

这里document.domain提到的API 文档:html.spec.whatwg.org/multipage/…–
mltsy

148

会话存储:

  1. 值仅在存储它们的窗口或选项卡时存在。

  2. 值仅在创建它们的窗口或选项卡中可见。

本地存储:

  1. 值保留窗口和浏览器的生命周期。

  2. 值在同一来源运行的每个窗口或选项卡之间共享。

因此,通过阅读和理解这一点,每个键值对在每个域中都是唯一的,因为本地存储会在窗口或选项卡之间保持值不变。


3
谢谢。您能否共享此参考的链接?
Christophe

3
现在,上面的链接已经消失,这是另一个很棒的资源:sitepoint.com/an-overview-of-the-web-storage-api
chrisjlee 2013年

结论可能是正确的,但不是推理。即使存储是按页面存储的,它仍然可以跨窗口/选项卡保留。
pyrocrasty
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.