SessionStorage 和 LocalStorage 生命周期 以及 浏览器刷新操作意味着什么?

SessionStorage 和 LocalStorage 的辨析

SessionStorage 和 LocalStorage 是浏览器提供的两种数据存储机制,当然这种实现是依据 HTML5 Web 存储标准,具体使用非常简单大家可以自行查阅相关资料。此外目前还有两种很有用的前端存储机制分别叫做 WEB SQL、IndexedDB(这里注意的是:Web SQL 已经不再是 W3C 的标准,不过有意思的是 w3c 表示不将其纳入标准这么多年之后,浏览器中至今仍有 chrome 依然毫不犹豫的支持该标准,Firefox、edge、IE 均已不在支持。详情点击查看)Web SQL 是后端程序员熟知的关系型数据库,具体实现采用的是智能手机中常用的微型关系数据库 SQLite。而 indexedDB 则是后端程序员熟知的另一种非关系型数据库 (NOSQL),即近几年新流行起来的非关系型数据库,如果你不熟悉那就可以简单的理解成 key-value 形式的存储模型,感兴趣的可以自行搜索了解更多。这些内容不再本次讨论范围内。

SessionStorage 和 LocalStorage 使用操作基本类似,两者最主要的区别在于生命周期不同,SessionStorage 顾名思义就是存在与会话阶段,当会话结束时,SessionStorage 存储的数据即会失效。那么关键来了什么才表示会话结束?其实在浏览器中一个活动标签页即代表一个会话【Session 说道这里,可能对后端比较熟悉的小伙伴会想到 HTTP 会话中 SessionID,没错这里两者存在一定的联系,但并不完全等同,由于 session ID 存在是为了解决 HTTP 协议的无状态性,要使基于 HTTP 协议的会话能够得以维持就需要通过 session id 来实现,并且 session 的实现依赖的是 cookie 机制,OK 点到为止,详情大家自行查阅】,如果当前标签页被关掉即代表,当前会话结束,此时当前 SessionStorage 中存储的数据就会被浏览器自动销毁。

相比之下 LocalStorage 生命周期就很长了,LocalStorage 是可以一直存活的,哪怕是你关闭浏览器,他依然存在。除非人为手动删除,所以我们可以将一些需要永久性存储的数据放置在 LocalStorage 中(当然也可以是 Cookie 中,当然鉴于 cookie 的特自动携带传输的特性,如果不是每次都有必要携带的数据请求就不要放在 cookie 中,这样不仅浪费带宽,而且通常情况下前考虑到安全性,一般都是不允许前端使用 JS 直接操作 cookie 的),而那些只需要在会话阶段需要存在的数据则放在 SessionStorage 中。

最后再多啰嗦一句,尽管这些存储机制都有自己的一些特色,但是他们也都遵循一条原则,那就是 “同源策略”。关于同源策略铺开讲也内容也是很多的,大家可以自行搜索了解。

自己之前的几个疑问?

1. 那么使用浏览器打开两个同样的网站,这两个网站的 SessionStorage 是共享的吗?

答案:当然是不能共享的。不明白的话仔细阅读第二段话。

2. 当我们重新刷新一个页面那么 SessionStorage 中的数据会消失吗?

答案:当然还是不会,即使你使用的是强制刷新仍旧不会使 SessionStorage 数据消失,即 SessionStorage 里面的数据只会在当前活动的标签页中关闭掉之后才会消失。

3. 浏览器刷新到底做了什么?

浏览器刷新做的只是重新加载网页数据【强制刷新的区别只是不使用浏览器缓存下来的HTML、JS数据,所有本页面用到的HTML、JS都需要重新向服务器获取】,并重新解析生成 DOM 树,当然还同时会重新解释执行 JavaScript 代码,之后重新绘制页面,注册绑定事件,之前页面在活动的时候对 JavaScript 变量做的数据赋值数据都会消失。

PS:个人在使用前后端完全分离的开发的模式的情况下,更喜欢使用 SessionStorage 和 LocalStorage 来进行数据存储。感觉这两种存储方式非常适合 SPA 这种开发模式。

`sessionStorage` 和 `localStorage` 都是浏览器提供的两种用于存储数据的数据存储机制,但它们之间有几个关键区别: 1. 存储生命周期: - **sessionStorage**: 这些数据仅在用户会话期间(即打开浏览器标签页或窗口期间)有效。一旦页面会话结束(例如,关闭标签页或浏览器),存储的数据就会被删除。 - **localStorage**: 存储的数据持久化,即使在用户离开网站后关闭浏览器,数据也会保留,直到用户主动清除或清除浏览器缓存。 2. 数据大小限制: - **sessionStorage**: 通常每个键值对的大小有限制,具体取决于浏览器的实现,但通常小于5MB。 - **localStorage**: 大小限制通常比sessionStorage大,但也可能因浏览器而异,通常也是有限的。 3. 数据隐私: - `sessionStorage`:由于其短暂性,不适合存储敏感信息,因为它们可能会被第三方访问或记录。 - `localStorage`: 在默认情况下,数据对所有脚本都是可访问的,包括跨域脚本,所以应谨慎使用,特别是涉及隐私的数据。 4. 清除方式: - 对于`sessionStorage`,数据会在会话结束时自动清除,但也可以通过JavaScript手动清除。 - 对于`localStorage`,可以使用`clear()`方法手动清除,也可以设置过期日期,但过期时间由浏览器决定而不是开发者。 相关问题: 1. 何时更适合使用`sessionStorage`而不是`localStorage`? 2. 如何在JavaScript中清除`sessionStorage`或`localStorage`? 3. 清除`localStorage`后,数据是否会立即消失?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值