持久化生命周期

37

我看了一些关于IndexedDB的文章,但是没有找到持久化数据的细节。我计划在一次数据操作会话中使用它,并在用户完成后上传。但如果发生以下情况会怎样呢?

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

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

任何处理这个问题的文档都可以接受。我浏览了规范,但阅读效果不佳。

谢谢。


1
有时候IndexDB的数据会自动删除,有人知道我们如何防止这种情况吗? - kuldeep chopra
4个回答

22

它类似于 localStorage,因此是跨会话的,意味着重新启动浏览器或系统不会影响其中存储的内容。但是,用户可以像清除cookie一样清除它。因此,它就像是持久性的cookie,您不能从服务器端信任它,而且您始终需要检查其完整性。


14
自 Chrome v52 和 Firefox v55 起,Persistent Storage 已经可用。但是不能保证其在其他浏览器上的支持。您必须测试持久性存储是否可用,并相应地做出反应。
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实现的文章,该文章定期更新有关此主题的新信息。


1
在当前的Chrome版本中,即使您删除了书签,权限也会永久授予。 - Sebi2020

6
截至2022年,IndexedDB是一种持久化的数据存储类型。因此,如果用户选择这样做,它会被清除。
注意:在引入Storage API之后,“permanent”文件夹可以被认为已经过时;“permanent”文件夹仅存储IndexedDB持久类型数据库。无论框模式是“尽力而为”还是“持久化”,数据都存储在/storage/default下。 https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria 因此,如果用户注销并重新登录,则可以像注销前一样访问数据。

3
如果浏览器在硬盘上的空间不足时,数据也可以在不需要用户干预的情况下被删除,正如您在MDN链接中所解释的那样。 - AxeEffect
1
2023年了,移动版Chrome竟然把我的IndexedDB给移除了,真是让人不爽!我找了半天也没找到设置选项能让它永久保留。相比之下,iOS版Safari就是永久的,真是让人感到欣慰。 - undefined

5
IndexedDB数据属于临时类型。因此,这些数据可以随时被清除。
这些数据的大小/寿命由非常新的配额管理API进行管理。
将来,IndexedDB可能会使用持久化类型(不太可能,也不是一个好主意)。

那么如何确保永久存储呢?例如,本地缓存的大型数据库需要不断复制到设备上,这种操作十分昂贵。 - Michael
4
看起来Chrome正朝着打开持久化存储的方向发展,但这似乎要等到2016年10月才会普及。https://developers.google.com/web/updates/2016/06/persistent-storage - Andrew

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