详解localStorage和sessionStorage,以及两者的区别

本文详细介绍了浏览器的localStorage和sessionStorage,包括它们的存储数据、获取数据、更新和删除数据的方法,以及它们在作用域、生命周期、存储容量和数据共享方面的差异。同时强调了同源策略对数据访问的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

localStorage:

   localStorage 是浏览器提供的一种客户端存储机制,用于在用户的浏览器中存储键值对形式的数据。下面是关于 localStorage 的详细解释:

1. 存储数据:

        使用 localStorage 存储数据非常简单。你可以使用 JavaScript 的 localStorage 对象,在客户端将数据以键值对的形式存储在浏览器中。例如,要存储一个名为 "username" 的值为 "John" 的数据,可以使用以下代码:

localStorage.setItem("username", "John");
2. 获取数据: 

        使用 localStorage 获取存储的数据也很简单。你可以使用 localStorage.getItem(key) 方法,通过指定键来获取对应的值。例如,要获取之前存储的 "username" 的值,可以使用以下代码:

var username = localStorage.getItem("username");
3. 更新数据:

        如果你想更新已存储的数据,只需使用相同的键来设置新的值即可。例如,要更新之前存储的 "username" 的值为 "Jane",可以使用以下代码:

localStorage.setItem("username", "Jane");
4. 删除数据: 

         可以使用 localStorage.removeItem(key) 方法来删除特定键的数据。例如,要删除之前存储的 "username" 的数据,可以使用以下代码:

localStorage.removeItem("username");
5. 清空数据:

        如果你想一次性删除所有存储在 localStorage 中的数据,可以使用 localStorage.clear() 方法。例如,要清空所有数据,可以使用以下代码:

localStorage.clear();

         在 localStorage 中存储对象时,需要将对象转换为字符串形式,因为 localStorage 只能存储字符串数据。你可以使用 JSON.stringify() 方法将对象转换为 JSON 字符串,然后将其存储在 localStorage 中。当需要使用存储的对象时,可以使用 JSON.parse() 方法将 JSON 字符串转换回原始的 JavaScript 对象。以下是一个示例,演示如在 localStorage 中存储和获取对象:

// 存储对象
var user = {
  name: "John",
  age: 30,
  email: "john@example.com"
};

localStorage.setItem("user", JSON.stringify(user));

// 获取对象
var storedUser = localStorage.getItem("user");
var parsedUser = JSON.parse(storedUser);

console.log(parsedUser.name); // 输出 "John"
console.log(parsedUser.age); // 输出 30
console.log(parsedUser.email); // 输出 "john@example.com"

         在上面的示例中,我们首先使用 JSON.stringify() 方法将 user 对象转换为 JSON 字符串,然后使用 localStorage.setItem() 方法将其存储在 localStorage 中。当我们需要获取存储的对象时,我们使用 localStorage.getItem() 方法获取存储的 JSON 字符串,然后使用 JSON.parse() 方法将其转换回原始的 JavaScript 对象。

        需要注意的是,存储在 localStorage 中的对象经过序列化和反序列化的过程,会丢失对象的方法和原型信息,只保留对象的属性和值。因此,在使用存储的对象时,需要确保对象的方法和原型信息已经重新设置。

 sessionStorage:

        sessionStorage 的语法与localStorage的一致,如上面示例,只需把localStorage对象换成sessionStorage 对象就行。下面主要说说两者的区别:

区别:

1. 作用域不同:

        sessionStorage 的作用域限定在当前会话(当前浏览器标签页或窗口),而 localStorage 的作用域是永久的,数据在不同会话(遵循同源策略)之间共享。

2. 生命周期不同:

   sessionStorage 的数据在会话结束时被清除,即当用户关闭浏览器标签页或窗口时,sessionStorage 中的数据会被删除。而 localStorage 的数据是持久化的,除非被显式清除,否则会一直保存在客户端。

 关于sessionStorage 的生命周期,还想多说几句:sessionStorage 是当前浏览器tab页有效,只要当前浏览器的标签关闭,sessionStorage 中的数据就会被清空,无需整个浏览器关闭。

 3. 存储容量不同:

   sessionStorage 的存储容量通常比 localStorage 小。一般来说,sessionStorage 的容量限制在 5MB 左右,而 localStorage 的容量限制通常在 5MB 到 10MB 之间,不同浏览器可能会有所不同。

4. 数据共享不同: 

   sessionStorage 的数据在同一个浏览器标签页或窗口中共享,但不会跨标签页或窗口共享。而 localStorage 的数据在同一个域名下的所有标签页和窗口中共享。

 关于sessionStorage 的问题:

        浏览器打开了两个标签,访问相同的URL,在其中一个页面点击按钮清空sessionStorage ,会对另外一个标签的sessionStorage 有影响吗?

答案是不会。

        在浏览器中,每个标签页都有自己独立的 `sessionStorage` 对象,用于存储会话级别的数据。如果你在一个标签页中执行了清空 `sessionStorage` 的操作,它只会清空当前标签页的 `sessionStorage`,不会对其他标签页的 `sessionStorage` 产生直接影响。

        当你在一个标签页中清空了 `sessionStorage`,其他标签页中的 `sessionStorage` 数据将保持不变,不会被自动清空。每个标签页都有自己独立的存储空间,它们之间是相互隔离的。

        如果是 localStorage ,则会有影响。因为localStorage 遵循浏览器的同源策略(Same Origin Policy)。

        同源策略是一种安全机制,用于限制不同源(Origin)的网页之间的交互,以防止恶意网页访问其他网页的数据。  在同源策略中,两个网页只有在协议、主机和端口都相同的情况下,两个网页才被认为是同源的。

        对于 `localStorage`,它的同源策略是基于域名的。只有当两个网页具有相同的协议、主机和端口时,它们才能访问相同的 `localStorage` 数据。如果网页的域名不同,即使在同一个浏览器中打开,它们也无法访问彼此的 `localStorage` 数据。

        这种同源策略的限制是出于安全考虑。通过限制不同源网页之间的交互,可以防止恶意网页窃取用户的敏感数据或进行其他恶意行为。

5. 数据访问方式不同: 

   sessionStorage 和 localStorage 分别通过 JavaScript 的 sessionStorage 和 localStorage 对象进行访问和操作。

        根据你的需求,选择适合的存储方式。如果你需要在会话期间存储临时数据,且数据不需要在不同标签页或窗口之间共享,可以使用 sessionStorage。如果你需要永久性地存储数据,或者需要在不同标签页或窗口之间共享数据,可以使用 localStorage。 

 

如果帮助到您了,可以留下一个赞👍告诉我  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿小野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值