Javascript本地存储的⽅式有哪些?区别及应用场景

本文详细介绍了JavaScript本地存储的四种方法:cookie、sessionStorage、localStorage和indexedDB,比较它们的存储大小、有效期、交互方式与应用场景,助您理解并选择合适的本地缓存策略。

javaScript 本地存储(也称本地缓存)的⽅法我们主要讲述以下四种:

  • cookie

  • sessionStorage

  • localStorage

  • indexedDB

cookie

Cookie ,类型为「小型文本文件」,指某些网站为了辨别用户身份而储存在用户本地终端上的数据。

是为了解决 HTTP 无状态导致的问题

作为一段一般不超过 4KB 的小型文本数据,它由一个名称(Name)、一个值(Value)和其它几个用于

控制 cookie 有效期、安全性、使用范围的可选属性组成

localStorage

HTML5 新方法,IE8及以上浏览器都兼容

特点

  • 生命周期:持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的

  • 存储的信息在同一域中是共享的

  • 当本页操作(新增、修改、删除)了 localStorage 的时候,本页面不会触发 storage 事件,是别的页面会storage 事件。

  • 大小:5M(跟浏览器厂商有关系)

  • localStorage 本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡

  • 受同源策略的限制

sessionStorage

   sessionStorage localStorage 使用方法基本一致,唯一不同的是生命周期,一旦页面(会话)关闭,

   sessionStorage  将会删除数据

扩展的前端存储方式

   indexedDB 是⼀种低级API,用于客户端存储大量结构化数据(包括, 文/ blobs)。该API使用索引来实

    现对该数据的高性能搜索

 

优点:

  • 储存量理论上没有上限

  • 所有操作都是异步的,相⽐ LocalStorage 同步操作性能更⾼,尤其是数据量较⼤时

  • 原⽣⽀持储存 JS 的对象

  • 是个正经的数据库,意味着数据库能⼲的事它都能⼲

缺点:

  • 操作⾮常繁琐

  • 本身有⼀定门槛

关于 cookie sessionStorage localStorage 三者的区别主要如下:

  • 存储⼤⼩: cookie 数据⼤⼩不能超过 4k sessionStorage localStorage 虽然也有存 储⼤⼩的限制,但⽐ cookie 得多,可以达到5M或更⼤

  • 有效时间: localStorage 存储持久数据,浏览器关闭后数据不丢失除⾮主动删除数据; sessionStorage 数据在当前浏览器窗⼝关闭后⾃动删除; cookie 设置的 cookie 过期时间 之前⼀直有效,即使窗⼝或浏览器关闭

  • 数据与服务器之间的交互⽅式, cookie 的数据会⾃动的传递到服务器,服务器端也可以写 cookie 到客户端;

  • sessionStorage localStorage 不会⾃动把数据发给服务器,仅在本 地保存

应⽤场景

  • 标记⽤户与跟踪⽤户⾏为的情况,推荐使⽤ cookie

  • 适合⻓期保存在本地的数据(令牌),推荐使⽤ localStorage

  • 敏感账号⼀次性登录,推荐使⽤ sessionStorage

  • 存储⼤量数据的情况、在线⽂档(富⽂本编辑器)保存编辑历史的情况,推荐使⽤ indexedDB

### JavaScript本地存储方式区别与适用景 #### 1. **Cookie** - **特点**: Cookie是一种较早的本地存储技术,主要通过HTTP协议在客户端和服务器之间传递数据。它的大小通常被限制为4KB以内,并且每次HTTP请求都会携带Cookie信息[^2]。 - **缺点**: - 数据量有限制(最多4KB)。 - 每次HTTP请求都会增加额外开销,因为Cookie会被附加到每个请求头部。 - 安全性和隐私问题较为突出,容易受到XSS攻击。 - **使用景**: - 用户身份验证:如保存用户的登录状态或会话信息。 - 跨页面数据共享:用于同一域名下多个页面之间的数据交换。 ```javascript // 设置Cookie document.cookie = "username=John Doe; path=/"; // 获取Cookie let cookies = document.cookie.split(';'); cookies.forEach(cookie => { let [key, value] = cookie.trim().split('='); console.log(key, value); }); ``` --- #### 2. **SessionStorage** - **特点**: SessionStorage提供了一种简单的键值对存储机制,数据只会在当前浏览器窗口或标签页中有效,在关闭该窗口或标签页后数据即丢失[^1]。 - **缺点**: - 生命周期短,无法长期保存数据。 - 不适合跨窗口共享数据。 - **使用景**: - 单次会话期间临时存储数据,例如表单填写过程中缓存输入内容。 - 需要防止数据泄露给其他窗口的应用程序逻辑。 ```javascript // 存储数据 sessionStorage.setItem('key', 'value'); // 获取数据 let data = sessionStorage.getItem('key'); // 删除数据 sessionStorage.removeItem('key'); ``` --- #### 3. **LocalStorage** - **特点**: LocalStorage类似于SessionStorage,但它没有生命周期限制,除非手动清除,否则数据将永久保存在用户设备上。 - **缺点**: - 数据以明文形存储,存在一定的安全风险。 - 支持的最大容量因浏览器而异,通常是5MB左右。 - **使用景**: - 缓存少量不敏感的数据,比如用户偏好设置、主题样等。 - 存储不需要频繁更新的信息,例如文章草稿或其他静态资源。 ```javascript // 存储数据 localStorage.setItem('theme', 'dark'); // 获取数据 let theme = localStorage.getItem('theme'); // 清除特定数据 localStorage.removeItem('theme'); // 清空所有数据 localStorage.clear(); ``` --- #### 4. **IndexedDB** - **特点**: IndexedDB是一个功能强大的低级API,允许开发者在客户端存储大量的结构化数据,甚至可以索引这些数据以便快速检索[^4]。 - **缺点**: - API相对复杂,学习曲线较高。 - 浏览器兼容性可能存在问题,尤其是在老旧版本中。 - **使用景**: - 大规模离线应用开发,例如在线文档编辑器或复杂的Web应用程序。 - 需要在客户端处理大量动态变化的数据集时使用。 ```javascript // 打开数据库连接 let request = indexedDB.open("myDatabase", 1); request.onerror = function(event) { console.error("Error opening database"); }; request.onupgradeneeded = function(event) { let db = event.target.result; if (!db.objectStoreNames.contains("users")) { db.createObjectStore("users", { keyPath: "id" }); } }; request.onsuccess = function(event) { let db = event.target.result; // 添加记录 let transaction = db.transaction(["users"], "readwrite"); let store = transaction.objectStore("users"); store.add({ id: 1, name: "Alice" }); // 查询记录 let getRequest = store.get(1); getRequest.onsuccess = function() { console.log(getRequest.result.name); // 输出 Alice }; }; ``` --- ### 总结对比表格 | 属性/特性 | Cookie | SessionStorage | LocalStorage | IndexedDB | |------------------|---------------------|-----------------------|-----------------------|----------------------| | **存储位置** | HTTP Header | 浏览器内存 | 浏览器磁盘 | 浏览器磁盘 | | **最大容量** | ~4KB | ~5MB | ~5MB | 数百兆字节及以上 | | **生命周期** | 到期时间指定 | 当前会话结束 | 永久 | 显删除 | | **安全性** | 较弱 (易受XSS攻击) | 中等 | 中等 | 较强 | | **适用范围** | 跨页面通信 & 认证 | 同一会话内的短期存储 | 长期存储简单数据 | 结构化大数据存储 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值