localStorage 的持久性如何?

IT技术 javascript persistence local-storage persistent-storage
2021-01-30 06:04:32

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

规格

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

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

5个回答

Mozilla 像 cookie 一样实现它:

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

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

在 DOM Storage 中,无法为您的任何数据指定到期时间。所有到期规则都由用户决定。在 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 只能在客户端读取。所以问题是,在你的应用程序中,谁需要这些数据——客户端还是服务器?

我认为这个MDN 链接解释的更清楚。
2021-04-06 06:04:32

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

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

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

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

+1 -- 这就是为什么我将本地存储用作服务器上的缓存和备份用户数据的原因。(当然,这假设有适当的登录机制。)
2021-03-18 06:04:32
Basically, you should not heavily depend on Local Storage. ... 绝对地 !!
2021-04-01 06:04:32

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

饼干不也是这样吗?
2021-03-26 06:04:32
另一方面,他正在编写一个插件,我认为它是特定于浏览器的。
2021-03-31 06:04:32
对于 cookie 也是如此。
2021-04-04 06:04:32
不,对于 cookie,这不一定是正确的:在 OSX 上,根据我的经验,使用 Webkit 的应用程序似乎正在共享 cookie。虽然我可能会误解效果。
2021-04-07 06:04:32

本地存储旨在成为客户端上可靠、持久的数据存储。不是设计为“更好的 cookie”:该功能旨在由会话存储满足。

来自201112 月的 Web Storage Spec Candidate Recommendation

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

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

也许这自您 8 年前的原始帖子以来已经发生了变化,但是本地存储非常可以用作 cookie 的替代品(仅需要客户端访问)。会话存储不能。一旦浏览器关闭,会话存储就会被删除。
2021-04-12 06:04:32

如果您将 localStorage 用于 iOS 应用程序,请务必小心。最新版本的 iOS(5.1 太棒了)已将 localstorage 和 localdb 数据移动到缓存的一部分,该部分定期清除,即根本不持久。我还不能确定这是错误还是政策变化。

我相信这适用于 WebViews,但不适用于 Safari。
2021-03-27 06:04:32