HTML5本地存储中的项目何时过期?

JavaScript HTML

宝儿

2020-03-24

在localStorage中存储的数据(作为HTML5中DOM存储的一部分)可以使用多长时间?我可以为放入localStorage的数据设置过期时间吗?

第3157篇《HTML5本地存储中的项目何时过期?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

6个回答
斯丁猪猪 2020.03.24

生命周期由应用程序/用户控制。

标准

用户代理应仅出于安全原因或在用户要求时才使本地存储区中的数据过期。用户代理在运行可访问该数据的脚本时应始终避免删除数据。

小卤蛋Jim 2020.03.24

从W3C草案中:

用户代理应仅出于安全原因或在用户要求时才使本地存储区中的数据过期。用户代理在运行可访问该数据的脚本时应始终避免删除数据。

您将需要使用setItem(key,value);来按计划进行更新。它将使用新数据添加或更新给定密钥。

SamHarry 2020.03.24

我建议将时间戳存储在您存储在localStorage 中的对象

var object = {value: "value", timestamp: new Date().getTime()}
localStorage.setItem("key", JSON.stringify(object));

您可以解析对象,获取时间戳并与当前日期进行比较,并在必要时更新对象的值。

var object = JSON.parse(localStorage.getItem("key")),
    dateString = object.timestamp,
    now = new Date().getTime().toString();

compareTime(dateString, now); //to implement
Stafan 2020.03.24

您可以使用lscache它会自动为您处理此问题,包括存储大小超出限制的实例。如果发生这种情况,它将开始修剪最接近其指定到期时间的项目。

来自readme

lscache.set

Stores the value in localStorage. Expires after specified number of minutes.

Arguments
key (string)
value (Object|string)
time (number: optional)

这是常规存储方法之间唯一的真正区别。获取,删除等工作相同。

如果您不需要太多功能,则可以简单地存储带有值的时间戳记(通过JSON)并检查其是否过期。

值得注意的是,将本地存储留给用户是有充分理由的。但是,当您需要存储极其临时的数据时,像lscache这样的事情确实会派上用场。

小宇宙古一 2020.03.24

强烈建议在这里使用sessionStorage

  • 它与localStorage相同,但是在会话被破坏/浏览器关闭时被破坏
  • 此外,localStorage可以在选项卡之间共享,而sessionStorage只能在当前选项卡中使用,但是刷新页面或更改页面上的值不会更改
  • sessionStorage还可用于减少针对Cookie的网络流量

用于设定值

sessionStorage.setItem("key","my value");

获得价值

var value = sessionStorage.getItem("key");

点击这里查看API

设置的所有方法都是

  sessionStorage.key = "my val";
  sessionStorage["key"] = "my val";
  sessionStorage.setItem("key","my value");

所有获得的方式都是

  var value = sessionStorage.key;
  var value = sessionStorage["key"];
  var value = sessionStorage.getItem("key");
泡芙 2020.03.24

无法指定到期时间。这完全取决于用户。

https://developer.mozilla.org/zh-CN/docs/Web/API/Window/localStorage

当然,您的应用程序存储在客户端上的某些内容以后可能不会出现。用户可以显式摆脱本地存储,否则浏览器可能会遇到空间问题。进行防御性编程是件好事。但是,一般情况下,根据该单词的一些实际定义,事情会“永远”存在。

编辑 -很明显,如果您认为自己的应用程序过旧,则可以主动删除它们。也就是说,您可以在保存的内容中明确包含某种时间戳,然后在以后使用该时间戳来确定是否应刷新信息。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android