javascript中sessionStorage 、localStorage 和 Cookie

本文深入解析了前端存储技术,包括Cookie、localStorage和sessionStorage的区别与应用。探讨了它们的生命周期、数据大小限制、与服务器通信方式及安全性。并提供了基本操作示例。

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

欢迎访问我的博客,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~

参考文章:JS 详解 Cookie、 LocalStorage 与 SessionStorage

下面是个人总结内容:

相同点

用于浏览器端存储的缓存数据

不同点

特性CookielocalStoragesessionStorage
数据的生命期可设置的失效时间,到达时间自动过期除非被清除,否则永久保存仅用于当前会话,浏览器关闭,立即被清除
存放数据大小4K左右一般为5MB一般为5MB
与服务器端通信携带在HTTP头中,数据会发送到服务器端,可能造成宽带浪费只在客户端,不参与和服务端的通信只在客户端,不参与和服务端的通信
易用性需程序员自己封装,源生的Cookie接口不友好源生接口可以接受,亦可再次封装来对Object和Array有更好的支持源生接口可以接受,亦可再次封装来对Object和Array有更好的支持

应用场景

Cookie:

1. 最好精简,因为本身存放数据大小很小
2. 常用于判断用户登录,对于登录过的用户,浏览器会插入一个唯一的标识,当下次用户需要登录,只要读取到这个值,就能判断当前用户是否登录了

localStorage:

1. 购物车管理工作,一些产生的本地数据用以完成数据持久化

sessionStorage:

  1. 多页面表单,按步骤引导用户填写

安全性

  1. Cookie、localStorage 和 sessionStorage三者,只要打开控制台,都能看到这三者存放的数据的,并且能够随意修改,所以会产生风险
  2. sessionStorage使用了session加密,这样用户看到的数据都是经过加密处理过的,会难以获取正确的标识
  3. 但是对于localStorage或者Cookie的数据,就可以被肆意妄为的修改或者伪造了
  4. 上面是我个人的一些理解,文章中还提到了XSS注入的风险,关于XSS注入为此我专门查了些文档,推荐一篇自我感觉写的相当详细的Web安全测试之XSS
  1. 前者存储空间更大
  2. 前者存储内容不会发送到服务器,防止造成宽带浪费
  3. 接口丰富
  4. 独立的存储空间:每个域(包括子域)有独立的存储空间,各个存储空间是完全独立的,避免造成数据混乱
  5. 每个特定的域名下最多生成20个cookie
  6. sessionStorage用于本地存储一个会话存储,关闭会话,随之销毁
  7. localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的
  8. Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地存储数据而生

一些基本操作

localStoragesessionStorage都具有相同的操作方法,例如setItemgetItemremoveItem

setItem存储value

用于存储对象格式的数据

1
2
sessionStorage.setItem("key", "value");     
localStorage.setItem("site", "qqqww");

getItem获取value

获取指定关键字段key本地存储的值

1
2
var value = sessionStorage.getItem("key");     
var site = localStorage.getItem("site");

removeItem删除key

删除指定关键字段key本地存储的值

1
2
sessionStorage.removeItem("key");     
localStorage.removeItem("site");

clear清除所有的key/value

清除所有本地的key/value

1
2
sessionStorage.clear();     
localStorage.clear();

其他操作方法:点操作和[ ]

web Storage不但可以用自身的setItem`,getItem`等方便存取,也可以像普通对象一样用点(.)操作符,及[]的方式进行数据存储

1
2
3
4
5
var storage = window.localStorage
storage.key1 = "hello"
storage["key2"] = "world"
console.log(storage.key1)
console.log(storage["key2"])

遍历

localStorage和sessionStorage的key和length属性实现遍历

sessionStoragelocalStorage提供的key()length可以方便的实现存储的数据遍历

1
2
3
4
5
6
var storage = window.localStorage;
for(var i=0, len=storage.length; i<len;i++){
var key = storage.key(i);
var value = storage.getItem(key);
console.log(key + "=" + value);
}
### sessionStoragelocalStorage Cookie 的区别及用法 #### 数据存储位置 - **Cookie**: 存储在浏览器与服务器之间,每次HTTP请求都会携带Cookie数据[^1]。 - **sessionStorage**: 仅在客户端(浏览器)中保存,不会发送至服务器[^1]。 - **localStorage**: 同样仅在客户端保存,也不会参与服务器的通信[^4]。 #### 生命周期 - **Cookie**: 只在设定的有效期内有效,可以通过`Expires`属性指定过期时间。如果未设置,则默认为会话结束时失效[^1]。 - **sessionStorage**: 仅在当前浏览器窗口或标签页关闭前有效,一旦关闭则数据丢失[^1]。 - **localStorage**: 数据具有永久生命周期,除非手动清除,否则数据始终存在[^4]。 #### 数据容量限制 - **Cookie**: 单个Cookie大小不得超过4KB,且由于其随每次HTTP请求传输,因此不适合存储大量数据[^3]。 - **sessionStorage** **localStorage**: 它们的存储上限通常可达5MB甚至更高,具体取决于浏览器实现[^3]。 #### 数据共享特性 - **Cookie**: 在同一域名下的所有页面间共享。 - **sessionStorage**: 不支持跨窗口共享,即不同浏览器窗口中的sessionStorage相互独立。 - **localStorage**: 支持在同一域名下的所有窗口间共享数据。 #### 使用场景建议 - 当需要频繁向服务器提交少量状态信息时可选用Cookie;当希望临时保存某些仅供前端使用的非敏感数据并限于单一浏览会话期间可用sessionStorage;而对于那些需长久保留又无需同步到服务端的信息宜采用localStorage[^2]。 以下是针对这三种技术的一些基本操作示例: ```javascript // 对于 localStorage 的增删改查方法演示如下: // 设置键值对 localStorage.setItem('username', 'Alice'); // 获取对应键的值 let name = localStorage.getItem('username'); console.log(name); // 输出 Alice // 删除特定键值对 localStorage.removeItem('username'); // 清除全部数据项 localStorage.clear(); ``` 同样地,sessionStorage API接口几乎完全一致只是作用范围有所差异而已,在此不再赘述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值