当前位置: 首页 > article >正文

如何通过设置失效时间清除本地存储的数据

一、使用`localStorage`和时间戳(JavaScript)

1. 原理

`localStorage`是浏览器提供的一种在本地存储数据的方式,数据没有过期时间限制。但是可以通过自己记录时间戳来模拟数据过期的功能。在存储数据时,同时存储一个时间戳,表示数据的存储时间。当读取数据时,检查当前时间与存储时间的差值,如果超过了设定的失效时间,就清除该数据。

2. 示例代码

存储数据并设置失效时间(以存储一个用户信息对象为例):

function setDataWithExpiry(key, value, ttl) {

  const now = new Date();

  const item = {

    value: value,

    expiry: now.getTime() + ttl,

  };

  localStorage.setItem(key, JSON.stringify(item));

}

// 存储一个用户对象,设置失效时间为1小时(1 * 60 * 60 * 1000毫秒)

const user = { name: "John", age: 30 };

setDataWithExpiry("user", user, 1 * 60 * 60 * 1000);

读取数据并检查失效时间:

function getData(key) {

  const itemStr = localStorage.getItem(key);

  if (!itemStr) {

    return null;

  }

  const item = JSON.parse(itemStr);

  const now = new Date();

  if (now.getTime() > item.expiry) {

    localStorage.removeItem(key);

    return null;

  }

  return item.value;

}

const user = getData("user");

if (user) {

  console.log("用户信息有效:", user);

} else {

  console.log("用户信息已过期或不存在");

}

二、使用`sessionStorage`和定时器(JavaScript)

1. 原理

`sessionStorage`存储的数据在浏览器会话结束时会自动清除。可以结合定时器来提前清除数据。当存储数据时,同时启动一个定时器,定时器的时间为设定的失效时间,时间一到就清除存储的数据。

2. 示例代码

存储数据并设置定时器(以存储一个消息为例):

function setDataWithTimer(key, value, ttl) {

  sessionStorage.setItem(key, value);

  setTimeout(() => {

    sessionStorage.removeItem(key);

  }, ttl);

}

// 存储一个消息,设置失效时间为30分钟(30 * 60 * 1000毫秒)

setDataWithTimer("message", "这是一个重要消息", 30 * 60 * 1000);

读取数据(注意没有过期检查,因为定时器会自动清除):

function getData(key) {

  return sessionStorage.getItem(key);

}

const message = getData("message");

if (message) {

  console.log("消息:", message);

} else {

  console.log("消息不存在");

}


http://www.kler.cn/a/464033.html

相关文章:

  • asp.net core框架搭建4-部署IIS/Nginx/Docker
  • Wend看源码-Java-fork/Join并行执行任务框架学习
  • C/C++在鸿蒙系统中主要用于硬件开发和系统级编程
  • Maven 教程之 pom.xml 详解
  • CentOS7安装配置JDK保姆级教程(图文详解)
  • vue cli更新遇到的问题(vue -V查询版本号不变的问题)
  • SpringMVC(三)请求
  • 51c自动驾驶~合集44
  • 信息安全、网络安全和数据安全的区别和联系
  • SpringBoot返回文件让前端下载的几种方式
  • 如何选择最适合自己需求的SEO外链策略?
  • mysql中递归的使用 WITH RECURSIVE
  • ESP32_H2-ESP32_H2(IDF)学习系列-安装官方组件
  • 在K8S中,节点状态notReady如何排查?
  • Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成logback 及 原理分析
  • 探索 JMeter While Controller:循环测试的奇妙世界
  • Qt天气预报系统设计界面布局第四部分右边
  • 【玩转OCR | 腾讯云智能结构化OCR应用探索和场景实践】
  • 给vscode的新项目选择虚拟环境
  • 【漫话机器学习系列】032.代表点聚类算法(Representative-Based Clustering Algorithm)
  • STM32单片机芯片与内部57 SPI 数据手册 寄存器
  • k8s系列--通过docker拉取的镜像导入到 containerd中
  • misc-python脚本学习笔记
  • SPI通信-(STM32)
  • 机器学习代码中常用方法
  • 租用服务器还是服务器托管:哪种方案更适合您?