111

对于我正在编写的插件,我非常依赖 localStorage。所有用户设置都存储在其中。某些设置要求用户编写正则表达式,如果他们的正则表达式规则在某个时候消失,他们会感到难过。所以现在我想知道 localStorage 的持久性如何。

规格

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

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

4

5 回答 5

75

Mozilla 像 cookie 一样实现它:

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

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”,不完全是

Cookie 和本地存储确实有不同的用途。Cookies 主要用于服务器端读取,LocalStorage 只能在客户端读取。所以问题是,在你的应用程序中,谁需要这些数据——客户端还是服务器?

于 2012-03-30T19:33:44.360 回答
18

基本上,您不应该严重依赖本地存储。

Local Storage 与 Session Storage 一起旨在替代 cookie,定义更一致的 API。与 cookie 有一些不同之处:

  • 虽然 cookie 可以从客户端和服务器端访问,但一般来说,Web 存储,特别是本地存储,只能从客户端访问。
  • 将每个域的容量(官方的 cookie 为 4 KB)提高到超过 5MB(Firefox、Google Chrome 和 Opera,在 IE 中为 10MB)。

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

于 2012-03-30T18:14:00.860 回答
7

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

于 2012-03-30T18:16:14.263 回答
5

本地存储旨在成为客户端上可靠、持久的数据存储。它并非设计为“更好的 cookie”:该功能旨在通过 Session Storage 来满足。

来自2011 年12 月的 Web Storage Spec Candidate Recommendation

(本地存储)专为跨多个窗口的存储而设计,并且持续时间超过当前会话。特别是,出于性能原因,Web 应用程序可能希望在客户端存储数兆字节的用户数据,例如整个用户创作的文档或用户的邮箱。

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

于 2012-03-30T22:08:17.413 回答
3

如果您将 localStorage 用于 iOS 应用程序,请非常小心。最新版本的 iOS(5.1 让我头疼)已将 localstorage 和 localdb 数据移动到定期清除的缓存的一部分,即根本不是持久的。我还不能确定这是错误还是政策更改。

于 2012-04-14T10:50:08.410 回答