localStorage有多持久?


100

我正在编写的插件在很大程度上取决于localStorage。所有用户设置都存储在其中。有些设置要求用户写正则表达式,如果他们的正则表达式规则在某个时候消失了,他们会感到很遗憾。所以现在我想知道localStorage的持久性如何。

规格

用户代理应仅出于安全原因或在用户要求时才使本地存储区中的数据过期。

上面看起来像在客户端上的cookie一样工作。即,当用户清除所有浏览器数据(历史记录,Cookie,缓存等)时,localStorage也将被截断。这个假设正确吗?


1
考虑到浏览器可以决定什么构成“安全原因”,因此在理想情况下,您不会认为它会持续很长时间。但是,可以安全地假设它持续存在,直到用户显式刷新它为止。
科宾(Corbin)2012年

1
使用localStorage时只有一个警告:在Firefox 39、38和37中,它似乎无法可靠运行(我们没有检查任何较旧的版本)。在大约1%的用户计算机上,localStorage有时会在浏览我们的网站的过程中丢失,而会话cookie被保留。对我来说似乎是个虫子。
安德烈亚斯(Andreas)

1
@PeeHaa,它不仅像cookie一样工作,而且在法律上也定义为“ cookies”。实际上,存储信息会与其他Cookie一起显示在url中chrome:settings/cookies
Pacerier's

Answers:


69

Mozilla像cookie一样实现它:

当时间范围为“所有”时,可以通过“工具->清除最近的历史记录-> Cookies”清除DOM存储(通过nsICookieManager :: removeAll)

https://developer.mozilla.org/en/DOM/Storage

在DOM存储中,无法为您的任何数据指定有效期限。所有到期规则均由用户决定。对于Mozilla,大多数规则都是从Cookie相关的过期规则继承的。因此,您可能希望大多数DOM存储数据至少持续一段有意义的时间。

http://ejohn.org/blog/dom-storage/

Chrome像缓存一样实现它:

LocalStorage不是安全存储

HTML5本地存储将未加密的数据以字符串形式保存在常规浏览器缓存中

坚持不懈

在磁盘上,直到被用户(删除缓存)或应用删除

https://developers.google.com/web-toolkit/doc/latest/DevGuideHtml5Storage


至于“ Cookie的替换”,不完全是

Cookies和本地存储确实可以满足不同的目的。Cookies主要用于读取服务器端,LocalStorage只能读取客户端。因此,问题是,在您的应用程序中,谁需要此数据-客户端还是服务器?


1
我认为这个MDN链接的解释更加清晰。
Bo Lu

17

基本上,你应该不会在很大程度上依赖于本地存储。

本地存储和会话存储一起旨在替代cookie,从而定义更一致的API。与Cookie相比有一些区别:

  • 虽然可以从客户端和服务器端访问cookie,但是通常只能从客户端访问Web存储,尤其是本地存储。
  • 将每个域(Firefox,Google Chrome和Opera以及IE中的10MB)的容量(用于Cookie的官方大小为4 KB)提高到5MB以上。

所以,是的,你的假设是正确的。


1
+1-这就是为什么我将本地存储用作缓存并在服务器上备份用户数据的原因。(当然,这要假定存在登录机制。)
josh3736 2012年

2
Basically, you should not heavily depend on Local Storage.……绝对!
Tenali Raman 2015年

7

关于使用本地存储要注意的一件事。这是非常特定于浏览器的。如果您使用firefox存储数据,则无法在chrome或ie等中使用。此外,就清除cookie和会话而言,我注意到它也取决于浏览器,以了解是否清除了本地存储。如果您真的打算依靠应用程序的本地存储,那么我会仔细研究很多细节。


14
Cookies也不是吗?
杰弗里·斯威尼

3
对于cookie也是如此。
Moshe L

不,对于cookie不一定是正确的:在OSX上,使用Webkit的应用程序似乎在共享我的经验。虽然我可能会误解效果。
Thomas Tempelmann '16

另一方面,他正在编写一个插件,我认为它是特定于浏览器的。
GuyT

5

本地存储被设计为客户端上可靠,持久的数据存储。它不是设计为“更好的cookie”的:该功能旨在由Session Storage满足。

201112月Web存储规范候选推荐书开始

(本地存储)旨在用于跨越多个窗口的存储,并且持续时间超出当前会话。特别是,出于性能方面的考虑,Web应用程序可能希望在客户端存储兆字节的用户数据,例如整个用户编写的文档或用户的邮箱。

作为客户端数据-它在浏览器实现的大小限制内与任何客户端数据一样持久。用户可以随时删除它,在文本编辑器中将其打开并进行编辑等-就像任何客户端数据一样。


1
也许自您8年前的原始帖子以来,这种情况已经发生了变化,但是Local Storage在很大程度上可以用作Cookie的替代品(其中仅需要客户端访问)。会话存储不能。关闭浏览器后,会话存储将被删除。
布拉德

3

如果您将localStorage用于iOS应用程序,请务必小心。iOS的最新版本(我的头上只有5.1)将localstorage和localdb数据移到了定期清除的缓存部分,即根本没有持久性。我还不能确定这是错误还是政策更改。


2
我相信这对于WebViews而言是正确的,但对于Safari而言则不然。
Trott
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.