如何明确请求最终用户不删除本地存储数据?

时间:2017-03-06 10:39:30

标签: javascript angularjs html5 local-storage indexeddb

我正在使用angularJS开发应用程序。我的应用程序需要在本地保存数据。所以,我正在使用HTML5本地存储。

HTML5本地存储的问题是,当用户清除浏览数据时,所有数据都将丢失,我们需要避免这种情况。我意识到,由于数据存储在用户计算机上,因此无法100%保护数据安全。

基本上,有没有办法明确告诉浏览器这些数据是特殊的,当其他网站的数据被清除时不应该清除?这必须是明确鼓励用户不要从该特定站点删除本地数据的方式。或者,或者,我们是否需要合并本地数据库。哪个本地数据库是最佳选择?

4 个答案:

答案 0 :(得分:4)

您无法阻止用户从其网络浏览器中删除他们的数据(因为它他们的网络浏览器)。

没有适用该规则的本地数据库。

如果您想防止意外删除数据:将其同步到服务器上的用户帐户。

答案 1 :(得分:1)

据我所知,没有办法阻止用户从浏览器中删除本地数据(在我看来不应该有一个)。

如果您确实希望保留数据,则应将它们与服务器同步。

答案 2 :(得分:0)

如果用户清除所有浏览器数据,则无法保留本地存储。这取决于他们的选择。

在支持webkit的浏览器中存在类似webSQL,indexedDB的存储,但如果他们选择在清除浏览器时删除站点数据,则数据将丢失。

在chorme中的复选框" cookie和网站插件数据"在"清除浏览数据菜单"将决定删除所有网站数据。

谢谢, MG

答案 3 :(得分:0)

我相信你要找的是navigator.storage.persist()。它不会阻止用户删除数据(因为这将是一个主要的安全漏洞),但它实质上会告知浏览器不能删除数据,因为无法从服务器重新获取/重新生成数据。下面的代码片段将完成您在支持浏览器方面所做的工作。

"use strict"; // always put this just once at the start of all javascript files
function persistStorage(thenFunc) {
    thenFunc = thenFunc || function(success){
        if (!success) console.error("Failed to request persistant storage!");
    };
    if (
      typeof navigator === "object" && 
      typeof navigator.storage === "object" && 
      typeof navigator.storage.persist === "function"
    ) {
        navigator.storage.persist().then(
            thenFunc.bind(0, true),
            thenFunc.bind(0, false)
        );
    } else {
        thenFunc(false)
    }
}

然后,调用函数persistStorage,如果成功,可以选择使用传递true的回调来保存存储。