我在编写插件时非常依赖 localStorage。所有用户设置都存储在其中。有些设置要求用户编写正则表达式,如果他们的正则表达式规则在某个时候消失了,他们会很伤心。所以现在我想知道 localStorage 的持久性如何。
从规格:
用户代理应该仅出于安全原因或当用户要求这样做时才使本地存储区域中的数据过期。
上面看起来就像客户端的 cookie 一样。即当用户清除所有浏览器数据(历史记录、cookies、缓存等)时,localStorage 也将被截断。这个假设正确吗?
我在编写插件时非常依赖 localStorage。所有用户设置都存储在其中。有些设置要求用户编写正则表达式,如果他们的正则表达式规则在某个时候消失了,他们会很伤心。所以现在我想知道 localStorage 的持久性如何。
从规格:
用户代理应该仅出于安全原因或当用户要求这样做时才使本地存储区域中的数据过期。
上面看起来就像客户端的 cookie 一样。即当用户清除所有浏览器数据(历史记录、cookies、缓存等)时,localStorage 也将被截断。这个假设正确吗?
Mozilla 像 cookie 一样实现它:
当时间范围为“一切”时,可以通过“工具 -> 清除最近的历史记录 -> Cookies”清除 DOM 存储(通过 nsICookieManager::removeAll)
https://developer.mozilla.org/en/DOM/Storage
在 DOM Storage 中,无法为您的任何数据指定到期时间。所有到期规则都由用户决定。在 Mozilla 的情况下,这些规则中的大部分都是从与 Cookie 相关的过期规则继承而来的。因此,您可能会期望大部分 DOM 存储数据至少持续一段有意义的时间。
Chrome 像缓存一样实现它:
LocalStorage 不是安全存储
HTML5 本地存储将未加密的数据以字符串形式保存在常规浏览器缓存中。
坚持
在磁盘上直到被用户(删除缓存)或应用程序删除
https://developers.google.com/web-toolkit/doc/latest/DevGuideHtml5Storage
至于“替代 Cookie”,不完全是
Cookie 和本地存储确实有不同的用途。Cookies 主要用于服务端读取,LocalStorage 只能在客户端读取。所以问题是,在你的应用程序中,谁需要这些数据——客户端还是服务器?
基本上,你应该不会在很大程度上依赖于本地存储。
本地存储和会话存储旨在替代 cookie,定义更一致的 API。与 cookie 有一些区别:
所以是的,你的假设是正确的。
关于使用本地存储需要注意的一件事。这是非常特定于浏览器的。如果您使用 firefox 存储数据,它在 chrome 或 ie 等中将不可用。此外,就清除 cookie 和会话而言,我注意到它也特定于浏览器是否清除本地存储。如果您真的打算依赖本地存储来存储应用程序,我会深入研究细节。
本地存储旨在成为客户端上可靠、持久的数据存储。它不是设计为“更好的 cookie”:该功能旨在由会话存储满足。
来自2011年12 月的 Web Storage Spec Candidate Recommendation,
(本地存储)专为跨越多个窗口的存储而设计,并持续到当前会话之后。特别是,出于性能原因,Web 应用程序可能希望在客户端存储数兆字节的用户数据,例如整个用户创作的文档或用户的邮箱。
作为客户端数据 -在浏览器实现的大小限制内,它与任何客户端数据一样持久。用户可以随时删除它,在文本编辑器中打开它并进行编辑等——就像任何客户端数据一样。
如果您将 localStorage 用于 iOS 应用程序,请务必小心。最新版本的 iOS(5.1 太棒了)已将 localstorage 和 localdb 数据移动到缓存的一部分,该部分定期清除,即根本不持久。我还不能确定这是错误还是政策变化。