var hours = 1; // to clear the localStorage after 1 hour
// (if someone want to clear after 8hrs simply change hours=8)
var now = new Date().getTime();
var setupTime = localStorage.getItem('setupTime');
if (setupTime == null) {
localStorage.setItem('setupTime', now)
} else {
if(now-setupTime > hours*60*60*1000) {
localStorage.clear()
localStorage.setItem('setupTime', now);
}
}
var myHour = new Date();
myHour.setHours(myDate.getHours() + 1); //one hour from now
data.push(myHour);
localStorage.setItem('storedData', JSON.stringify(data))
function checkExpiration (){
//check if past expiration date
var values = JSON.parse(localStorage.getItem('storedData'));
//check "my hour" index here
if (values[1] < new Date()) {
localStorage.removeItem("storedData")
}
}
function myFunction() {
var myinterval = 15*60*1000; // 15 min interval
setInterval(function(){ checkExpiration(); }, myinterval );
}
myFunction();
// Store the data with time
const EXPIRE_TIME = 1000*60*60;
localStorage.setItem('storedData', JSON.stringify({
time: new Date(),
data: "your some data"
}));
// start the time out
setTimeout(function() {
localStorage.removeItem('storedData');
}, EXPIRE_TIME); // after an hour it will delete the data
9条答案
按热度按时间dluptydi1#
你不能。When do items in HTML5 local storage expire?你唯一能做的就是将delete语句设置为1小时的超时。这需要用户停留在您的页面上,否则不会执行超时。
您还可以设置过期字段。当用户重新访问您的站点时,您要做的第一件事就是检查过期时间并在下次访问时删除存储。
iezvtpos2#
在App.js文件中添加以下代码,然后每隔1小时就会清空一次localStorage
zynd9foi3#
使用setInterval,在本地数据中设置/推送到期密钥,检查下面的代码。
wbgh16ku4#
你不能使用setTimeout()。因为你不能保证你的代码将在1小时内在浏览器上运行。但是你可以设置一个时间戳,在返回时只需检查时间戳并根据到期条件清除存储。
pengsaosao5#
使用cookies代替
Cookies.set('foo_bar', 1, { expires: 1/24 })
zi8p0yeb6#
或者,您可以在WebWorkers中使用IndexedDB。它的基本意思是你可以创建一个与主线程并行的JavaScript程序,就像这样
优点是当它完成工作时,您没有对它的引用,它会自动清理。然而,由于我不能完全确定以上内容,这里是来自生活标准的工人的寿命
工作进程通过消息通道及其MessagePort对象与其他工作进程和浏览上下文进行通信。
每个WorkerGlobalScope对象worker全局作用域都有一个worker端口列表,其中包含与另一个端口纠缠的所有MessagePort对象,并且worker全局作用域拥有一个(但只有一个)端口。此列表包括专用工作进程情况下的隐式MessagePort。
在创建或获取worker时,给定环境设置对象o,要添加的相关所有者取决于o指定的全局对象的类型。如果o指定了一个全局对象,它是一个WorkerGlobalScope对象(即,如果我们正在创建一个嵌套的专用worker),那么相关的所有者就是那个全局对象。否则,o指定一个全局对象,它是一个Window对象,相关的所有者是o指定的负责文档。如果worker的WorkerGlobalScope的所有者集不为空,或者:
另一个优点是可以终止一个worker,就像这样
还有,值得一提的是
IndexedDB内置了对模式版本的支持,并通过IDBOpenDBRequest.onupgradeneeded()方法进行升级;但是,您仍然需要编写升级代码,使其能够处理来自以前版本(包括有bug的版本)的用户。
dfuffjeb7#
这适用于在页面呈现时浏览器窗口未重新加载的SPA:
在本地存储中设置
expiresIn
字段。在窗口重新加载时检查是否看到if current time >= expiresIn
if true clear localStorage items else carry on
您也可以在业务逻辑需要时执行此检查。4si2a6ki8#
只需在您的应用程序中添加检查以检查变量是否存在,然后对其进行检查。在变量上放置一个unix timestamp,并在用户下次访问您的站点时进行比较。
gpnt7bae9#
我认为setTimeout()方法可以做到这一点。
已更新:
在将值设置为localStorage的同时,还设置了记录数据的时间。
现在的问题是,如果用户离开网站。而且setTimeout将不起作用。因此,当用户下次访问该网站时,您必须再次引导setTimeout。