localStorage 什么时候清空?

新手上路,请多包涵

我希望数据在 localStorage 中保存多长时间。普通用户的 localStorage 数据会保留多长时间?如果用户不清除它,它会持续到浏览器重新安装吗?

这在浏览器之间是否一致?

原文由 Bnicholas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.2k
2 个回答

W3C 草案是这样说的

用户代理应该仅出于安全原因或在用户要求时才使本地存储区域中的数据过期。用户代理应始终避免在可以访问该数据的脚本运行时删除数据。

因此,如果浏览器遵循规范,它应该一直存在,直到用户在所有浏览器上将其删除,我还没有发现任何已在我的项目中删除的内容。

一篇值得阅读的好文章也是 http://ejohn.org/blog/dom-storage/

原文由 Dominic Green 发布,翻译遵循 CC BY-SA 3.0 许可协议

localStorage 也称为 Web 存储、HTML5 存储和 DOM 存储(这些都是同一个意思)。

 localStorage.setItem('bob', varMyData);
sessionStorage.setItem('bob', varMyData);

localStorage 与 sessionStorage 类似, 不同之处在于 localStorage 中存储的数据没有过期时间,而 sessionStorage 中存储的数据会在浏览会话结束时(即浏览器/浏览器选项卡关闭时)被清除。 (有关 最新的存储大小限制,请参阅下面的 限制 部分。)

会话存储的使用频率远低于 localStorage,并且仅存在于当前浏览器选项卡中——即使加载同一网站的两个选项卡也会有不同的 sessionStorage 数据。 sessionStorage 数据在页面刷新后仍然存在,但不会关闭/打开选项卡。另一方面,LocalStorage 数据在 同源 的所有选项卡和窗口之间共享。 LocalStorage 数据不会过期;它在浏览器重新启动后甚至在操作系统重新启动后仍然存在。

localStorage 在所有浏览器上都可用,但持久性并没有一致地实现。特别是,localStorage 可以通过用户操作清除,也可能被无意中清除(谁会认为清除所有 cookie 也会清除 localStorage?)。

在 Firefox 中,满足这三个条件时会清除 localStorage:(a) 用户清除最近的历史记录,(b) 选择清除 cookie,© 时间范围为“所有”——或者当 LocalStorage 已满时——参见“局限性”部分。

在 Chrome 中,满足以下条件时会清除 localStorage:(a) 清除浏览数据,(b) 选择“cookies 和其他站点数据”,© 时间范围是“从时间开始”——或者当 LocalStorage 已满时(参见下面的“限制”部分)。在 Chrome 中,现在也可以 删除一个特定站点的 localStorage

在 IE 中,要清除 localStorage:(a) 工具–Internet 选项,(b) 常规选项卡,© 退出时删除浏览历史记录,(d) 确保“Cookies 和网站数据”(或“临时 Internet 文件和网站文件” “) 被选中,(e) 考虑取消选中顶部的“保留收藏夹网站数据”

在 Safari 中:(a) 单击 Safari (b) 首选项 © 选择隐私选项卡 (d) 单击删除所有网站数据 (e) 单击立即删除

Opera:尽管 Opera 网站上有关于 localStorage 的优秀文章,但我还没有为用户找到关于如何清除 localStorage 的明确(非编程)说明。如果有人找到,请在此答案下方发表评论并附上参考链接。

限制:

TOTAL localStorage 限制为可用磁盘空间的 50%。

此外,任何一个“来源”(域 + 任何子域)的 localStorage(理论上)限制为总 localStorage 的 20%——但实际上,一个域的 localStorage(截至 2022 年 10 月)是:

  • 最小值:10Mb
  • 最大值:2Gb
  • 实际:5Mb (根据 此脚本 的修改版本,我的系统有 6Gb 可用空间限制)

(测试系统:i7 / 32Gb / 500Gb SSD w 6Gb free / Brave browser:

版本 1.45.133 Chromium:107.0.5304.141(官方构建)(64 位)

当 TOTAL localStorage 已满时,浏览器将根据 LRU 策略开始清除数据(称为“原始驱逐”)——首先删除最近最少使用的域,然后是下一个,直到浏览器不再结束极限。

请注意,此源驱逐过程将删除整个域的数据价值,直到存储量再次低于限制。删除域的 localStorage 数据是“全有或全无”——没有任何修剪效果来删除部分来源(域),因为部分数据可能比没有数据更糟糕。


Opera 开发站点 对 localStorage 有一个很好的总结:

当前在客户端存储数据的方式——cookie——是一个问题:

  • 体积小:Cookie 的最大尺寸一般在 4 KB 左右,这对于存储任何类型的复杂数据来说都不是很好

  • cookie 很难跟踪同一站点上的两个或多个交易,这可能发生在两个或多个不同的选项卡中

  • 可以使用跨站点脚本等技术利用 Cookie,从而导致安全漏洞

其他(不太流行的)cookies 替代品包括涉及查询字符串、隐藏表单字段、基于 flash 的本地共享对象等的技术。每种技术都有自己的一系列与安全性、易用性、大小限制等相关的问题。所以直到现在我们一直在使用非常糟糕的方式在用户端存储数据。我们需要一种更好的方法,这就是 Web Storage 的用武之地。

网络存储

W3C Web Storage 规范被设计为在客户端存储数据的更好方式。它有两种不同类型的存储:会话存储和本地存储。

会话和本地存储通常能够为每个域存储大约 5 MB 的数据,这比 cookie 多得多。 请注意,尽管 MDN 的数字已更新(2022 年 10 月) 并且现在说:最小值:10Mb/最大值:2Gb,但作者不能超过每个域/来源 5Mb。 MDN / 测试脚本

资源:

https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

MDN - Browser_storage_limits_and_eviction_criteria

https://javascript.info/localstorage

https://dev.opera.com/articles/web-storage/

http://www.quirksmode.org/html5/storage.html

http://www.ghacks.net/2015/02/05/how-to-clear-web-storage-in-your-browser-of-choice/

https://nakedsecurity.sophos.com/2014/11/05/how-to-clear-out-cookies-flash-cookies-and-local-storage/

http://www.opera.com/dragonfly/documentation/storage/

MDN 上的 DOMStorage 文章(由 John Resig 撰写)

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

原文由 cssyphus 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题