本地存储何时被清除?

190

我可以期望localStorage中的数据保留多久?一般用户的localStorage数据会持续多久?如果用户不清除它,它能持续到浏览器重新安装吗?

这个行为在各个浏览器是否一致?

6个回答

226
localStorage也被称为Web Storage、HTML5 Storage和DOM Storage(它们都指的是同一样东西)。
localStorage.setItem('bob', varMyData);
sessionStorage.setItem('bob', varMyData);

就在这里,就在顶部,我们需要记住还有indexedDB API - 它可以存储比localStorage多得多的数据(请参阅下面的限制)

localStorage与sessionStorage类似,唯一的区别是localStorage中存储的数据没有过期时间,而sessionStorage中存储的数据在浏览会话结束时被清除(即当浏览器/浏览器标签关闭时)。(请参阅下面的限制部分以获取最新的存储大小限制。)

会话存储(session storage)比localStorage使用得少得多,并且仅存在于当前浏览器标签中 - 即使两个加载了相同网站的标签也会有不同的sessionStorage数据。sessionStorage数据在页面刷新后仍然存在,但在关闭/打开标签后会被清除。另一方面,localStorage数据在同一的所有标签和窗口之间共享。localStorage数据不会过期;它在浏览器重启甚至操作系统重启后仍然存在。

localStorage在所有浏览器上都可用,但持久性的实现并不一致。特别是,localStorage可能会被用户操作清除,也可能会被意外清除(谁会想到清除所有cookie也会清除localStorage呢?)。

在Firefox中,当满足以下三个条件时,localStorage会被清除:(a)用户清除最近的历史记录,(b)选择清除cookie,(c)时间范围为“全部” - 或者当LocalStorage已满时 - 请参阅下面的“限制”部分。

在Chrome中,当满足以下条件时,localStorage会被清除:(a) 清除浏览数据,(b) 选择"cookies和其他站点数据",(c) 时间范围选择"从开始时" -- 或者当LocalStorage已满时(请参见下面的"限制"部分)。在Chrome中,现在也可以删除特定站点的localStorage
在IE中,清除localStorage的方法是:(a) 工具--Internet选项,(b) 常规选项卡,(c) 在退出时删除浏览历史,(d) 确保选择"Cookies和网站数据"(或者"临时互联网文件和网站文件"),(e) 考虑取消选中顶部的"保留收藏夹网站数据"。
在Safari中:(a) 点击Safari,(b) 首选项,(c) 选择隐私选项卡,(d) 点击删除所有网站数据,(e) 点击立即删除。
Opera:尽管Opera网站上有关于localStorage的优秀文章,但我还没有找到向用户清除localStorage的清晰(非编程)说明。如果有人找到了,请在此答案下方留下评论并附上参考链接。
限制:
总的localStorage受限于可用磁盘空间的50%。
然而,indexedDB API允许您存储可用磁盘空间的80%,其中75%可以由单个域使用。 <Gru>这就是我所说的...!<\Gru> IndexedDB比localStorage更复杂,因此您可能希望使用类似Dexieidb的封装器。 IndexedDB比localStorage更持久(除了Safari浏览器,它在最后使用后7天会删除IndexedDB数据库)。请参阅此链接和此链接以及W3C工作文件。实际上,IndexedDB的数据可能比文档记录的更持久。
此外,任何一个"origin"(域名+任何子域名)的localStorage理论上限制为总localStorage的20%。然而,实际上,一个域名的localStorage(截至2022年10月)为:
  • 最小值:10Mb
  • 最大值:2Gb 来源
  • 实际值:5Mb (根据此脚本的修改版本,在我系统上限制为6Gb的可用空间)
    (测试系统:i7 / 32Gb / 500Gb SSD,可用空间6Gb / Brave浏览器:
    版本1.45.133 Chromium: 107.0.5304.141(官方版本)(64位)

当总的localStorage已满时,浏览器将根据最近最少使用(LRU)策略开始清除数据(称为“源清除”)- 最近最少使用的域将首先被删除,然后是下一个,直到浏览器不再超过限制。

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

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

目前在客户端存储数据的方式——Cookie,存在一些问题:
- 尺寸较小:Cookie通常最大尺寸约为4 KB,对于存储任何复杂数据并不理想; - Cookie难以跟踪同一网站上两个或多个事务的情况,尤其是在不同的标签页中; - Cookie容易受到跨站脚本等技术的利用,导致安全漏洞。
其他(不太流行)的替代方案包括使用查询字符串、隐藏表单字段、基于Flash的本地共享对象等技术。每种方案都有与安全性、易用性、尺寸限制等相关的问题。因此,迄今为止,我们一直在使用相当糟糕的方式来存储用户端的数据。我们需要一种更好的方式,这就是Web存储的作用所在。
Web存储 W3C Web存储规范被设计为在客户端存储数据的更好方式。它有两种不同类型的存储:会话存储和本地存储。
会话存储和本地存储通常可以每个域名存储约5 MB的数据,这比Cookie要多得多。需要注意的是,尽管MDN的数据已更新(2022年10月),并且现在显示:最小值:10 MB / 最大值:2 GB,但本文作者无法超过每个域名/源的5 MB限制。M.D.N. / test script 资源:

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

MDN - 浏览器存储限制和清除标准

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/


2
我想补充一点,你实际上可以在“开发模式”(按F12键)的存储选项卡中查看、修改和删除这些localStorage变量。 - David Tabernero M.
IndexedDB也是一样的情况吗?也就是说,它也可以通过用户操作来清除吗? - Pylinux
在IE中,除了上述步骤外,用户还需要关闭浏览器才能看到本地存储的删除。 - Kyasa Madhavi

127

W3C的草案称:

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

因此,如果浏览器遵循规范,在所有浏览器中它应该一直持久存在,除非用户将其删除,但我在任何项目中都未发现删除的情况。

另外阅读的好文章是:http://ejohn.org/blog/dom-storage/


用户要求这样做 = 当用户清除数据时。请参阅 http://www.stevesouders.com/blog/2012/09/10/clearing-browser-data/ 了解特定浏览器的清理方法和如何执行。 - Julien Kronegg
4
更新谷歌浏览器时,本地存储可能会被清除。在过去的12个月中,这种情况已经发生了两次。如果数据很重要,建议用户将相关数据下载到文件中,以便在发生此类情况时重新安装。 - user2677034
1
请注意我的回答,Safari据说在一周内不访问该网站后会删除LocalStorage。这似乎属于“出于安全原因”。 - Steve Barnes

12

持续时间

无限制。数据将在浏览器和操作系统重新启动时保留。

容量

每个域可以在本地存储中存储最少5MB的数据

对于一些浏览器,您可以存储最多1GB的数据


4
在Chrome中执行“清除浏览数据”操作时,如果选择“Cookie和其他站点和插件数据”选项,则sessionStorage数据将被删除。

3

本地存储中的内容将持久存在,只要用户选择清除存储(全部或其中一个值)

关于浏览器间的一致性,localstorage目前在每个主要浏览器上都可用,包括IE8+(请参见http://caniuse.com/#feat=namevalue-storage


2
在2020年,WebKit团队宣布如果用户在七天内没有与网站进行交互,包括LocalStorage在内的所有可编写脚本的存储都将被Safari删除。
(他们指出,添加到移动设备主屏幕的Web应用程序不是Safari的一部分,它们的LocalStorage数据不应该被删除。)

https://webkit.org/blog/10218/full-third-party-cookie-blocking-and-more


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接