我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

前言

我们都知道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的过期机制内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

怎么实现localStorage的过期机制

今天小编给大家分享一下怎么实现localStorage的过期机制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。cookie过
2023-06-29

一文教你掌握Java如何实现判空

实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。所以本文小编为大家整理了Java中几个常见的判空方法,希望对大家有所帮助
2023-05-17

一文教你JavaScript如何实现分支优化

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于分支优化的相关内容,如果有许多个判断条件,使用大量的if分支会使整个代码的可读性和可维护都大大降低,下面一起来看一下,希望对大家有帮助。
2022-11-22

如何在Redis中实现分布式锁的自动续期机制

实现分布式锁的自动续期机制可以通过以下步骤在Redis中实现:获取锁时设置一个过期时间,确保锁在一定时间内会自动释放。使用一个后台线程或定时任务来定期更新锁的过期时间,以实现自动续期。在获取锁时,可以使用Redis的SET命令来设置锁的
如何在Redis中实现分布式锁的自动续期机制
2024-03-14

一篇文章告诉你如何用Python控制Excel实现自动化办公

目录1.安装2.操作一个简单的Excel文档3.操作简单Excel文档并添加数据格式4.Excel中添加不同类型的数据5.Excel中添加数据图表最后:可能给予你助力的教程总结1.安装2.操作一个简单的Excel文档 操作注释及代码:操作完
2022-06-02

如何使用 Golang 实现 HTTP 文件上传的重试机制?

使用 go 实现 http 文件上传重试机制:使用 client.do() 方法发送请求。在发生错误时,等待指定的秒数(retrywaitseconds)。最多重试 maxretries 次。如果重试次数达到上限,则返回错误 "maximu
如何使用 Golang 实现 HTTP 文件上传的重试机制?
2024-05-14

教你如何用CCSprite实现运行抛物线的同时CCSprite播放另一个动作

编程学习网:我们平时在游戏开发中经常会需要让CCSprite同时播放两个动作,那么该怎么实现呢?本篇教程将教你如何用CCSprite实现运行抛物线的同时CCSprite播放另一个动作。
教你如何用CCSprite实现运行抛物线的同时CCSprite播放另一个动作
2024-04-23

如何实现批处理bat判断一个文件在最近5分钟内是否被更新过的代码

这篇文章主要介绍“如何实现批处理bat判断一个文件在最近5分钟内是否被更新过的代码”,在日常操作中,相信很多人在如何实现批处理bat判断一个文件在最近5分钟内是否被更新过的代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-06-08

编程热搜

目录