ImmortalDB 是在浏览器中存储持久键值数据的最佳方法,保存在其中的数据被冗余地存储在 Cookies、IndexedDB、LocalStorage 和 SessionStorage。如果其中的任何数据被删除或损坏,ImmortalDB 会进行自我修复。
举个例子,清除 cookie 是一种常见的用户操作(甚至对非技术用户来说,也是如此)。一般在没有存储压力警告的情况下,浏览器也会草率地删除 IndexedDB、LocalStorage 和 SessionStorage。而 ImmortalDB 对于这种情况,则是有弹性的。
这样说吧,ImmortalDB 就像 Evercookie,但它
会积极地被维护和记录;
提供了一个简单的,现代的,基于 Promise 的 API;
在可靠性和对用户的尊重间取得平衡。数据可靠地被存储着,但如果用户想清除 cookie 和应用程序的存储,也可以自行清除数据;
不使用恶意的漏洞利用工具(exploits),也不使用 Flash、Silverlight 或 Java 等第三方插件。只使用标准的、经过批准的 HTML 5 API;
不破坏性能或用户体验。例如,Evercookie 的 CSS 历史记录敲门(Knocking)可能会引起大量的后台 HTTP 请求产生,加载 Silverlight 或 Flash 可能会引发未被请求的许可模态框(permission modals)、或是颠簸(Thrashing)用户的磁盘。
当您将键值对存储在 ImmortalDB 中时,该键和值会冗余地保存在浏览器的 cookie、IndexedDB、LocalStorage 和 SessionStorage 数据存储中。
当您通过键检索值时,ImmortalDB 会:
在每个数据存储中查找那个密钥;
计算每个唯一返回值;
将最常见的返回唯一值确定为“正确”值;
返回这个正确的值。
接着,ImmortalDB 会“自愈”:如果任何数据存储区返回的值与所确定的正确值不同,或是根本没有值,则将正确的值重写到该存储区。通过这样的方式,一致性、可靠性和冗余得到维持。