iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >一文教你如何实现localStorage的过期机制
  • 400
分享到

一文教你如何实现localStorage的过期机制

2024-04-02 19:04:59 400人浏览 泡泡鱼
摘要

目录前言cookie过期机制expires和max-age的区别localStorage 数据过期需求分析:动手实践参考文章总结前言 我们都知道cookie存储的数据是可以添加过期时

前言

我们都知道cookie存储的数据是可以添加过期时间属性(Expires/Max-Age),实现过期的。 那么,LocalStrorage、sessionStrorage可以设置过期吗??

带着这样的疑问,我们一层层剥开其神秘的面纱。

cookie过期机制

我们知道Expires和Max-age都可以设置cookie的过期时间,那么两者存在什么样的异同点呢?

expires和max-age的区别

Expires 设置的是绝对值,即直接设置当前cookie在什么时候过期。 就像下面图中的这样, GMT格式。

  • Expires在Http/1.0中已经定义
  • max-age在HTTP/1.1中才有定义,为了向下兼容,仅使用max-age不够;

Expires 设置一个绝对值,至少会带来两个方面的问题:

  • 客户端和服务端时间不同步的问题。往往表现为时区不同、客户端时间可被用户自由修改。
  • 很容易在配置后忘记具体的过期时间,导致过期来临出现浪涌现象(我的理解应该是同时大批量更新的问题)。

Max-Age代表存活时间,记录的是一个相对时间(例如 6000s),起始时间点是服务器记录的requet-time。

我们看到除了上面提到的两个值,还有 session, 这个值代表的意思就是在当前连接下,关闭浏览器窗口、断开与服务连接,该数据即失效。

localStorage 数据过期

localstorage本身是没有过期机制的,不过我们可以通过其他手段来扩展,使其能够满足我们的数据过期的需求。

需求分析:

  • 存入数据时,顺带传入过去时间;
  • 获取数据时,判断当前是否过期,过期返回 undefined; 否则正常返回数据。

动手实践

localStorage 和 sessionStorage 都继承自 Storage 对象, 所以我们可以扩展Storage原型方法。

setStorageWithAge(key, value, age) 方法, 接收三个参数,第三个参数代表最大过期时间,我们这里参考 cookie的 Max-Age 的实现,用相对时间来做。

getStorageWithAge(key),内部直接判断时间是否过期来返回对应的值。

代码实现:

Storage.prototype.setStorageWithAge = (key, value, age) => {
    if (isNaN(age) || age < 1) throw new Error("age must be a number");
    const obj = {
        data: value, //存储值
        time: Date.now(), //存值时间戳
        maxAge: age, //过期时间
    };
    localStorage.setItem(key, JSON.stringify(obj));
};

Storage.prototype.getStorageWithAge = key => {
    const { data, time, maxAge } = jsON.parse(localStorage.getItem(key));
    if (time + maxAge < Date.now()) {
        localStorage.removeItem(key);
        return undefined;
    }
    return data;
};

尝试调用:

localStorage.setStorageWithAge('amingxiansen', '测试过期时间', 30000);
localStorage.getStorageWithAge('amingxiansen');

设定30s的过期时间,过期之前和过期之后获取到的结果。

参考文章

  • localStorage设置有效期、过期时间

总结

Storage只是浏览器的一种存储方案,除此之外还有IndexDB、WEBsql等。

这种实现数据过期机制的思路比较通用,可以扩展到其他需要设置数据过期的场景下。

到此这篇关于如何实现localStorage过期机制的文章就介绍到这了,更多相关localStorage的过期机制内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文教你如何实现localStorage的过期机制

本文链接: https://www.lsjlt.com/news/140802.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文教你如何实现localStorage的过期机制
    目录前言cookie过期机制expires和max-age的区别localStorage 数据过期需求分析:动手实践参考文章总结前言 我们都知道cookie存储的数据是可以添加过期时...
    99+
    2024-04-02
  • 怎么实现localStorage的过期机制
    今天小编给大家分享一下怎么实现localStorage的过期机制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。cookie过...
    99+
    2023-06-29
  • 一文教你掌握Java如何实现判空
    目录1、前言2、List的判空3、String的判空4、Optional4.1 Optional对象的创建4.2使用场景5、总结1、前言 实际项目中我们会有很多地方需要判空校验,如果...
    99+
    2023-05-17
    Java实现判空 Java判空方法 Java判空
  • 一文教你JavaScript如何实现分支优化
    以上就是一文教你JavaScript如何实现分支优化的详细内容,更多请关注编程网其它相关文章!...
    99+
    2022-11-22
    javascript
  • 一文教你如何使用Python绘制瀑布图
    目录前期准备方法一:waterfall_ax方法二:waterfall_chart方法三:plotly什么是瀑布图?瀑布图用表达两个数值之间的变化过程,过程值为正的时候,向上加,过程...
    99+
    2023-05-16
    Python绘制瀑布图 Python 瀑布图
  • 教你如何从 html 实现一个 react
    什么是 React React是一个简单的javascript UI库,用于构建高效、快速的用户界面。它是一个轻量级库,因此很受欢迎。它遵循组件设计模式、声明式编程范式和函数式编程...
    99+
    2024-04-02
  • 一文教你如何优雅的控制全局loading的显示
    在很多后台管理系统中,发送请求的时候,需要打开一个loading,收到响应后,需要关闭这个loading,对于这种通用的逻辑,我一般是在axios拦截器中做这种处理,因为不是每个请求...
    99+
    2024-04-02
  • 一文教会你微信小程序如何实现登录
    目录业务流程:下面开始用代码介绍1:data初始数据2:按钮触发的login点击事件3:调用后台的登录接口总结业务流程: 1:首先需要一个按钮触发事件 2:调用微信小程序的登录接口w...
    99+
    2024-04-02
  • 一文教会你在Docker容器中实现Mysql主从复制
    目录一 主从复制概念二 主从复制的优势三 docker容器实现mysql主从复制3.1 创建主服务器容器3.2 新建主配置文件 my.cnf3.3 重启master容器实例3.4 进入mysql-master容器3.5 ...
    99+
    2022-11-29
    docker搭建mysql主从 docker mysql 主从配置 docker容器mysql主从复制
  • 一篇文章教你如何用C语言实现strcpy和strlen
    目录 自己实现strcpy、strlenstrcpy的实现strlen的实现总结 自己实现strcpy、strlen strcpy的实现 思路: 通过指针访问地址...
    99+
    2024-04-02
  • 一文教你如何封装安全的go
    目录前言封装SafeGoSafeGoAndWait实现说明首先是接口设计方面其次是日志兼容hade最后是打印panic的trace记录总结前言 在业务代码开发过程中,我们会有很大概率...
    99+
    2024-04-02
  • 一文教你如何使用原生的Feign
    目录什么是Feign为什么使用Feign为什么要使用HTTP client为什么要使用Feign如何使用Feign项目环境说明引入依赖入门例子个性化配置更换为Spring的注解自定义...
    99+
    2024-04-02
  • 一文教你如何优雅的使用WebSocket
    目录简介特性使用场景具体实现一、首先是服务端代码,这里我用的是nodejs。二、然后是客户端代码总结简介 websocket是基于TCP的一种双向通信协议。在此之前,一直是采用轮询的...
    99+
    2024-04-02
  • 教你用python实现一个加密的文字处理器
    这是一个类似于记事本的文字处理器。与正常的记事本不同的是,它会将文本文档进行加密,确保无法被常规的程序打开。 由于本人是一位业余编程爱好者,对于“python之禅&rdq...
    99+
    2024-04-02
  • 一文教你MySQL如何优化无索引的join
    目录前言遍历循环查询join 查询join buffer (Block Nested Loop)附:mysql  join查询没有走索引的原因总结前言 MySQL Join...
    99+
    2024-04-02
  • 如何在Redis中实现分布式锁的自动续期机制
    实现分布式锁的自动续期机制可以通过以下步骤在Redis中实现: 获取锁时设置一个过期时间,确保锁在一定时间内会自动释放。 使用一个...
    99+
    2024-03-14
    Redis
  • python的import机制如何实现
    本篇内容主要讲解“python的import机制如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python的import机制如何实现”吧!import 机制功能Python 的 impo...
    99+
    2023-06-30
  • 一文教会你如何在npm上传自己的包
    目录1、官网注册2、查询是否存在包名3、初始化项目4、切换自己的npm源5、添加用户6、查看是否成功7、上传自己的包8、下载自己的包9、补充总结1、官网注册 首先要在npm官网注册自...
    99+
    2023-03-19
    npm上传包 npm 包 npm 包上传
  • 一文教你如何优雅处理Golang中的异常
    我们在使用Golang时,不可避免会遇到异常情况的处理,与Java、Python等语言不同的是,Go中并没有try...catch...这样的语句块,我们知道在Java中使用try....
    99+
    2024-04-02
  • 如何在Redis中实现数据的过期清理
    在Redis中,可以通过设置数据的过期时间来实现数据的自动清理。可以通过以下两种方式来设置键的过期时间: 使用EXPIRE命令:...
    99+
    2024-03-14
    Redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作