31

我阅读了几篇关于 IndexdDB 的文章,但找不到有关持久数据生命周期的详细信息。我计划在用户完成后将其用于数据操作和上传会话。但如果发生以下情况会发生什么:

  • 用户关闭浏览器选项卡
  • 用户关闭浏览器
  • 用户重新启动系统

此外,我通过基于 cookie 的身份验证来维护用户会话。如果用户注销并重新登录会发生什么?有没有办法在注销之前检索数据?

任何有关处理此问题的文档表示赞赏。我浏览了规范,但读起来并不好。

谢谢。

4

3 回答 3

19

就像localStorage,所以它是跨会话的,这意味着重新启动浏览器或系统不会影响其中存储的内容。但是,用户可以像清除 cookie 一样清除它。所以它就像持久化 cookie,你从服务器端不信任它,你总是需要检查它的完整性。

于 2013-04-04T18:43:43.890 回答
9

自 v52 和 Firefox 自 v55 以来,Chrome 和 Firefox 都提供了持久存储。但是不能依赖其他浏览器的支持。您必须测试持久存储是否可用并做出相应反应。

if (navigator.storage && navigator.storage.persist) {
  navigator.storage.persist().then(persistent => {
    if (persistent) {
      console.log("Storage will not be cleared except by explicit user action");
    } else {
      console.warn("Storage may be cleared by the UA under storage pressure.");
    }
  });
}

Chrome 需要获得许可才能使用此功能。navigator.storage.persist()如果满足以下任一条件,调用时将自动授予:

  • 该网站已添加书签(并且用户拥有 5 个或更少的书签)
  • 该网站具有很高的网站参与度
  • 该网站已添加到移动设备的主屏幕
  • 该站点已启用推送通知

此列表来自概述 Chrome 实现的文章,该文章会定期更新有关此主题的新信息。

于 2019-03-28T17:16:18.907 回答
5

IndexedDB 数据属于临时类型。所以这些数据可以随时被清除。

这些数据大小/生命周期由非常新的配额管理 API 管理

将来,IndexedDB 可能会使用持久性类型(不太可能也不是好主意)。

于 2013-04-05T02:44:59.987 回答