【问题标题】:How persistent is localStorage?localStorage 的持久性如何?
【发布时间】:2012-04-14 10:50:56
【问题描述】:

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

来自the specs

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

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

【问题讨论】:

  • 考虑到浏览器可以决定什么是“安全原因”,在理想情况下,您不会认为它会持续很长时间。但是,可以安全地假设它会一直持续到用户明确刷新它为止。
  • 使用 localStorage 时只有一个警告:它似乎在 Firefox 39、38 和 37 中无法可靠运行(我们没有检查任何旧版本)。在大约 1% 的用户机器上,localStorage 有时会在浏览我们网站的过程中丢失,而 session-cookie 会被保留。对我来说似乎是一个错误。
  • @PeeHaa,它不仅像 cookie 一样工作,而且在法律上也被定义为“cookie”。事实上,存储信息与其他 cookie 一起显示在 url chrome:settings/cookies

标签: javascript persistence local-storage persistent-storage


【解决方案1】:

Mozilla 像 cookie 一样实现它:

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

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

在 DOM 存储中无法为您的任何数据指定过期期限。所有过期规则都由用户决定。在 Mozilla 的情况下,这些规则中的大多数都继承自 Cookie 相关的过期规则。因此,您可能期望您的大部分 DOM 存储数据至少持续一段有意义的时间。 p>

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

Chrome 像缓存一样实现它:

LocalStorage 不是安全存储

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

持久性

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

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


至于“替换 Cookie”,not entirely

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

【讨论】:

  • 我觉得这个MDN link解释得更清楚了。
【解决方案2】:

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

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

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

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

【讨论】:

  • +1 -- 这就是我使用本地存储作为缓存并在服务器上备份用户数据的原因。 (当然,这是假设有一个登录机制。)
  • Basically, you should not heavily depend on Local Storage. ... 绝对!!
【解决方案3】:

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

【讨论】:

  • Cookie 不也是这样吗?
  • cookie 也是如此。
  • 不,Cookie 不一定如此:在 OSX 上,根据我的经验,使用 Webkit 的应用程序似乎正在共享 Cookie。虽然我可能会误解效果。
  • 另一方面,他正在编写一个插件,我认为它是特定于浏览器的。
【解决方案4】:

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

来自Dec 2011 Web Storage Spec Candidate Recommendation

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

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

【讨论】:

  • 也许自从您 8 年前的原始帖子以来,这种情况已经发生了变化,但是本地存储在很大程度上可以用作 cookie 的替代品(只需要客户端访问)。会话存储不能。浏览器一关闭,会话存储就会被删除。
【解决方案5】:

如果您将 localStorage 用于 iOS 应用,请务必小心。最新版本的 iOS(5.1 在我的脑海中浮现)已将 localstorage 和 localdb 数据移动到定期清除的缓存的一部分,即根本不是持久的。我还不能确定这是错误还是政策更改。

【讨论】:

  • 我相信这适用于 WebViews 但不是 Safari。
猜你喜欢
  • 2014-08-08
  • 1970-01-01
  • 2018-06-22
  • 2015-05-28
  • 1970-01-01
  • 2012-01-24
  • 2021-05-20
  • 2021-10-01
相关资源
最近更新 更多