首页 > 其他分享 >如何通过设置失效时间清除本地存储的数据?

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

时间:2025-01-01 18:41:14浏览次数:1  
标签:存储 const userSettings 过期 清除 token 失效 数据

  1. 使用localStorage和时间戳结合的方式(JavaScript)
    • 原理localStorage是一种在浏览器中存储数据的方式,数据不会过期,除非手动清除。为了实现数据的自动过期,可以将数据存储的同时,也存储一个时间戳。在读取数据时,通过比较当前时间和存储的时间戳来判断数据是否过期。
    • 存储数据时添加时间戳
      • 假设要存储一个用户的登录凭证(如token),并且希望它在1小时(3600秒)后过期。首先,将token和当前时间加上过期时间后的时间戳一起存储到localStorage中。例如:
      const token = 'your - token - value';
      const expirationSeconds = 3600;
      const expirationTime = Date.now() + expirationSeconds * 1000;
      localStorage.setItem('token', JSON.stringify({
        value: token,
        expiration: expirationTime
      }));
      
    • 读取数据并检查是否过期
      • 当需要使用token时,先从localStorage中读取存储的对象,然后获取其中的时间戳,与当前时间进行比较。如果时间戳小于当前时间,说明数据已经过期,需要清除localStorage中的数据;否则,可以使用存储的token。例如:
      const storedTokenObject = JSON.parse(localStorage.getItem('token'));
      if (storedTokenObject && storedTokenObject.expiration > Date.now()) {
        const token = storedTokenObject.value;
        // 使用token进行后续操作,如发送带有token的请求
      } else {
        // 数据过期,清除localStorage中的数据
        localStorage.removeItem('token');
      }
      
  2. 使用sessionStorage结合页面会话时长(JavaScript)
    • 原理sessionStorage存储的数据在当前页面会话结束时会自动清除。页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的会话。当用户关闭浏览器标签或窗口时,会话结束,sessionStorage中的数据也随之清除。可以利用这个特性来实现一种相对简单的基于会话时长的数据存储。
    • 存储数据到sessionStorage
      • 例如,存储一个用户在当前页面会话中选择的商品列表。可以直接将商品列表数据存储到sessionStorage中。例如:
      const selectedProducts = ['product1', 'product2'];
      sessionStorage.setItem('selectedProducts', JSON.stringify(selectedProducts));
      
    • 注意数据的自动清除
      • 由于sessionStorage会在页面会话结束时自动清除数据,所以不需要手动设置失效时间。但要注意,如果希望数据在用户长时间不操作后清除(比如设置一个自定义的会话超时时间),就需要结合其他手段,如定时器来检测用户的操作时间间隔,当超过设定的时间后手动清除sessionStorage中的数据。例如,可以在页面加载时设置一个定时器,当用户进行操作(如点击、滚动等)时重置定时器,当定时器超时后清除sessionStorage数据。
      let sessionTimeout;
      const sessionTimeoutSeconds = 3600; // 1小时
      function resetSessionTimer() {
        clearTimeout(sessionTimeout);
        sessionTimeout = setTimeout(() => {
          sessionStorage.clear();
        }, sessionTimeoutSeconds * 1000);
      }
      window.addEventListener('load', resetSessionTimer);
      window.addEventListener('click', resetSessionTimer);
      window.addEventListener('scroll', resetSessionTimer);
      
  3. 在IndexedDB中设置过期时间(较复杂的存储方案,JavaScript)
    • 原理:IndexedDB是一种更强大的浏览器端数据库,支持事务操作和复杂的数据存储。可以在IndexedDB中存储数据对象,并在对象中添加一个表示过期时间的属性。在读取数据时,检查这个过期时间属性来判断数据是否过期。
    • 打开或创建IndexedDB数据库并存储数据
      • 首先,打开或创建一个IndexedDB数据库。例如,创建一个名为myDataBase的数据库,用于存储带有过期时间的用户设置数据。
      const request = window.indexedDB.open('myDataBase', 1);
      let db;
      request.onupgradeneeded = function (event) {
        db = event.target.result;
        const objectStore = db.createObjectStore('userSettings', { keyPath: 'id' });
      };
      request.onsuccess = function (event) {
        db = event.target.result;
        const userSettings = {
          id: 1,
          theme: 'dark',
          expiration: Date.now() + 7200 * 1000 // 2小时后的过期时间
        };
        const transaction = db.transaction(['userSettings'], 'readwrite');
        const objectStore = transaction.objectStore('userSettings');
        const request = objectStore.put(userSettings);
        request.onsuccess = function () {
          console.log('数据已存储');
        };
      };
      
    • 读取数据并检查过期时间
      • 当需要读取userSettings数据时,打开数据库,获取数据对象,检查过期时间。如果过期,删除数据;如果未过期,使用数据。例如:
      const request = window.indexedDB.open('myDataBase', 1);
      request.onsuccess = function (event) {
        db = event.target.result;
        const transaction = db.transaction(['userSettings'], 'readonly');
        const objectStore = transaction.objectStore('userSettings');
        const getRequest = objectStore.get(1);
        getRequest.onsuccess = function () {
          const userSettings = getRequest.result;
          if (userSettings && userSettings.expiration > Date.now()) {
            console.log('主题设置:', userSettings.theme);
          } else {
            // 数据过期,删除数据
            const deleteRequest = objectStore.delete(1);
            deleteRequest.onsuccess = function () {
              console.log('过期数据已删除');
            };
          }
        };
      };
      

标签:存储,const,userSettings,过期,清除,token,失效,数据
From: https://www.cnblogs.com/zsnhweb/p/18646178

相关文章

  • 【Java教程】Day11-07 时间与日期:日期与时间API的转换与数据库存储
    Java提供了两个日期与时间处理API:旧的 java.util.Date 和 java.util.Calendar,以及新的 java.time 包。新的API以 Instant、LocalDateTime 等为核心,具有更清晰的设计和更强大的功能。除非你需要与遗留代码进行交互,否则建议使用新的API。在需要将新旧API进行转换时,......
  • 请详细介绍下垃圾回收的标记清除
    垃圾回收的标记清除算法在前端开发中,特别是JavaScript环境中,扮演着至关重要的角色。这种算法是JavaScript引擎自动管理内存的一种方式,主要目的是识别和释放不再使用的内存,以防止内存泄漏。以下是对标记清除算法的详细介绍:一、工作原理标记清除算法的工作原理可以分为两个阶段:标......
  • sql server 存储过程
    SQLServer存储过程笔记什么是存储过程(StoredProcedure)存储过程是预编译的SQL语句集合,存储在SQLServer数据库中,可以通过名称调用。它们通常用于执行复杂的操作、数据验证、错误处理或批量数据操作。存储过程可以接受输入参数,执行一系列的SQL操作,并返回结果或状态......
  • 【分布式存储】HDFS
    https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html HDFS(HadoopDistributedFileSystem)Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(GoogleFileSystem)Google文件系统设计前提和目标:硬件错误、流式数据访问、大规模数据集:运行在HDFS上的......
  • 【iscsi使用】1.SAN存储和NAS的对比
    目录1.SAN存储及NAS存储2.CentOS7搭建iscsi服务器3.无盘启动CentOS7SAN存储及NAS存储通过对比的方式来进行理解它们的使用场景及异同。原理和架构SAN(StorageAreaNetwork)存储区域网络原理:SAN是一种基于光纤通道、iscsi或其他高速传输技术构建的专用网络,它将存储设......
  • ALC5651休眠唤醒音频失效问题
    问题描述:用的是ALC5651的codec,测试偶发主板休眠唤醒之后,录音和喇叭播放声音都失效了。再重启,发现就能恢复正常。 问题分析:涉及到休眠唤醒后之类出现的问题,一般都是往休眠过程供电掉电、寄存器复位等方面去排查。 问题原因:codec供电接的是vcc_1v8_s0和vcc_3v3_s0,深度睡眠会掉......
  • 【分布式数据库与数据存储方案】详解
    分布式数据库与数据存储方案一、分布式数据库概述(一)概念分布式数据库是一种将数据分散存储在多个物理节点上的数据库系统,这些节点通过网络进行连接和通信,对外呈现出一个统一的逻辑数据库,用户或应用程序可以像操作传统的单一数据库一样与之交互,但其内部通过一系列复杂的......
  • LVGL-C 实现一个文件持久性缓存,用于存储配置相关数据
    实现功能描述:基于linux嵌入式平台开发App,在未移植数据库的情况下,文件存储是一个不错的持久性数据存储手段。创建代码文件:configcache.hconfigcache.c1.数据结构的结构体封装点击查看代码//配置信息结构typedefstruct{char*key;char*v......
  • 解除域名屏蔽并清除挂马文件的方法
    当您的网站被检测到挂马文件并导致域名被屏蔽时,必须采取一系列措施来彻底清除恶意代码并恢复域名的正常访问。以下是详细的步骤和建议:备份网站数据:在开始任何操作之前,请务必备份网站的所有数据,包括文件和数据库。这样可以在出现问题时快速恢复。扫描并清除挂马文件:使用......
  • C#服务化存储解决方案中的数据模型设计:构建高效、可扩展的企业级应用
    在当今数字化转型的浪潮中,企业对于数据处理的需求日益增长,传统的单体架构已经难以满足现代应用程序对性能和灵活性的要求。为了应对这一挑战,越来越多的企业开始转向微服务架构,并探索如何利用C#及其强大的.NET生态系统来实现高效的服务化存储解决方案。本文将深入探讨基于C#......