前端本地存储小总结

1. cookie

作用: 存储数据,当用户访问了某个网站的时候,我们可以通过 cookie 来向访问者电脑上存储数据,或者某些网站为了辨别用户身份、进行 session 跟踪储存来用户本地终端上的数据

特征
1.不同浏览器存放 cookie 的位置也不一样,也是不能通用的。
2. cookie 的存储是以域名形式区分的,不同的域存储的cookie是独立的。
3. 我们可以设置 cookie 生效的域(当前设置cookie所在域的子域),也就是说,我们能够操作的 cookie 是当前域以及当前域下的所有子域。
4. 一个域名下存放的 cookie 的个数是有限制的,不同浏览器存放的个数不一样,一般为20个。
5. 每个 cookie 存放的内容大小也是有限制的,不同的浏览器存放大小不一样,一般为4KB。
6. cookie 可以设置过期的事件,默认是会话级别的,或者过了设置的日期自动销毁。


cookie主要用于下面几个方面

  1. 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  2. 个性化设置(如用户自定义设置、主题等)
  3. 浏览器行为跟踪(如跟踪分析用户行为等)

cookie 的方法

expires:
通常设置 cookie 的生效时间,默认浏览器关闭后就没有了
domain 和 path:damain 是域名,path是路径。domain + path构成 url (默认为该cookie 所在域名 所在目录),用来限制被哪些 url 访问

secure:
通常 cookie 信息都是使用 HTTP 连接传递数据,这种传递方式很容易被查看,所以 cookie 存储的信息容易被窃取。假如 cookie 中所传递的内容比较重要,那么就要求使用加密的数据传递。secure 选项用来设置 cookie 只在确保安全的请求中才会发送。当请求时 HTTPS 或者其他安全协议时,包含 secure 选项的 cookie 才能被发送至服务器。

httpOnly:
设置 cookie 是否能通过 js 去访问(禁止客户端通过 js 对 cookie 进行增删改查,来确保用户信息和服务器安全性)

第三方 cookie:
通常 cookie 的域和浏览器地址的域匹配,这被称为第一方 cookie。那么第三方 cookie 就是 cookie 的域和地址栏中的域不匹配,这种 cookie 通常被用来第三方广告网站。为了跟踪用户的浏览记录,并且根据收集的用户的浏览习惯,给用户推送相关的广告。


session 和 cookie 区别
区别:

  • session 保存在服务器,cookie 保存在客户端;
  • session 中保存的是对象,cookie 中保存的是字符串;
  • session 不能区分路径,同一个用户访问一个网站期间,所有的 session 在任何一个地方都可以访问;
  • cookie 如果设置路径,则在某些地方不能访问
  • session 需要借助 cookie 才能正常工作,如果禁用 cookie , session 会失效;
  • 客户端会在发送请求的时候,自动将本地存活的 cookie 封装在信息头发送给服务器。

session 和 cookie 应用场景

  • session 上下文机制,针对每一个用户,通过 sessionid 来区分不同客户;
  • session 是以 cookie 或 url 重写为基础的,默认使用 cookie 实现,系统会创造一个名为 jsessionid的输出 cookie;
  • 重要状态用 session,不重要用 cookie,登录信息用 session,购物车用 cookie。

localStorage(本地存储)

HTML 5 新方法,仅 IE8及以上浏览器兼容。
特点:

  • 生命周期:持久化的本地存储,除非手动删除数据,否则数据永远不会过期。
  • 存储的信息在同一域中是共享的。
  • 当本页面操作了(增删改)localStorage 时,本页面不会触发 storage 事件,但是别的页面会触发 storage 事件。
  • 大小:一般时 5M。
  • 在非 IE 下的浏览器中可以本地打开,IE 浏览器要在服务器中打开。
  • localStorage 本质上对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡。
  • 同样会受到同源策略的限制。

sessionStorage

和localStorage 差不多,也是本地存储,但它是会话级别的。
特点:
用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且会话结束后会随之销毁。因此 sessionStorage 不是一种持久化的本地存储,仅仅是会话级别的存储。也就是说只要这个浏览器窗口没有关闭,即使刷新页面或进入同源另一个页面,数据仍然存在。关闭页面后,sessionStorage会立即销毁,或者在新窗口打开同源的另一个页面,sessionStorage中的数据也是没有的。


cookie、localStorage、sessionStorage的区别

相同:都是在本地存储数据(浏览器);
不同:
1. localStorage 只要在相同的协议、相同的主机名,相同的端口下,就能读取/修改到同一份 localStorage 数据;
2. sessionStorage 比 localStorage 更严苛一些,除了协议、主机名、端口号外,还要求在同一窗口,也就是浏览器的标签页下;
3. localStorage 是永久存储,除非手动删除;
4. sessionStorage 当会话结束即当前页面关闭时,自动销毁;
5. cookie 的数据会在每一次发送 http 请求的时候,同时发送给服务器,而 localStorage 和 sessionStorage 不会。

<think>好的,用户想了解前端本地存储技术,包括localStorage、sessionStorage和IndexedDB的用法和区别。首先,我需要回忆一下这些技术的知识点,并整理出来。 首先,前端本地存储主要有Cookie、Web Storage(包括localStorage和sessionStorage)、IndexedDB,可能还有Web SQL,不过后者已经被废弃了。用户提到的三个是重点。我需要分别介绍每个技术的特性、生命周期、储大小限制以及使用场景。 接下来,要比较它们的区别。比如,localStorage和sessionStorage都属于Web Storage,但生命周期不同,localStorage是永久储,直到被清除,而sessionStorage在会话结束时消失。储大小方面,Cookie通常只有4KB,而Web Storage有5-10MB,IndexedDB则更大,可能有250MB以上。 然后,我需要给出每个技术的示例代码,这样用户能更直观地理解如何使用。例如,localStorage的setItem和getItem,sessionStorage类似,但关闭标签页后数据消失。IndexedDB因为是数据库,操作更复杂,需要打开数据库,创建对象储空间,进行事务处理等。 还要注意引用用户提供的参考资料,特别是引用1到4,需要正确对应到各个部分。比如,引用1提到sessionStorage和localStorage的区别,引用4提到了localStorage作为简单的键值储,IndexedDB适合大量结构化数据。 用户可能需要了解如何选择合适的技术,所以需要总结适用场景。例如,简单数据用Web Storage,复杂或大量数据用IndexedDB,而Cookie适合服务器通信但储空间小。 最后,生成相关问题,帮助用户进一步学习。比如,如何安全使用本地存储,IndexedDB的索引机制,性能优化方法等。 现在需要确保回答结构清晰,分点说明,每个技术单独成节,对比表格明确,代码示例正确,并且引用正确。同时,语言要口语化,避免使用专业术语过多,但也要准确。</think>### 前端本地存储技术详解 前端本地存储技术主要用于在浏览器端持久化或临时储用户数据,常见技术包括 **Cookie**、**Web Storage (localStorage/sessionStorage)** 和 **IndexedDB**,以下是它们的核心特性和用法对比: --- #### 1. **Cookie** - **生命周期** 可手动设置过期时间,默认随会话关闭失效。 - **储大小** 单域名下最大约 **4KB**。 - **用途** 主要用于客户端与服务器通信(如身份验证),数据会随HTTP请求自动发送到服务端。 - **示例代码** ```javascript // 设置Cookie document.cookie = "username=John; expires=Thu, 18 Dec 2024 12:00:00 UTC; path=/"; // 读取Cookie const cookies = document.cookie.split(';'); ``` --- #### 2. **Web Storage** 包含两种储方式:`localStorage` 和 `sessionStorage`,均为键值对储。 ##### **localStorage** - **生命周期** 数据永久保,需手动清除。 - **储大小** 单域名下约 **5-10MB**(不同浏览器差异)。 - **用途** 长期储用户偏好设置、缓静态资源。 - **示例代码** ```javascript // 储数据 localStorage.setItem('theme', 'dark'); // 读取数据 const theme = localStorage.getItem('theme'); // 删除数据 localStorage.removeItem('theme'); ``` ##### **sessionStorage** - **生命周期** 数据仅在当前会话(标签页)有效,关闭标签页后自动删除。 - **储大小** 同 `localStorage`。 - **用途** 临时储表单数据或单页应用状态。 - **示例代码** ```javascript sessionStorage.setItem('currentPage', 'home'); ``` --- #### 3. **IndexedDB** - **生命周期** 数据持久化储,需手动清理。 - **储大小** 通常支持 **250MB 以上**(取决于浏览器策略)。 - **用途** 储大量结构化数据(如离线应用数据、文件缓),支持事务和索引查询。 - **示例代码** ```javascript // 打开数据库 const request = indexedDB.open('myDB', 1); request.onupgradeneeded = (event) => { const db = event.target.result; db.createObjectStore('books', { keyPath: 'id' }); }; // 插入数据 const transaction = db.transaction('books', 'readwrite'); const store = transaction.objectStore('books'); store.add({ id: 1, title: 'JavaScript Guide' }); ``` --- ### 技术对比表 | 特性 | Cookie | localStorage | sessionStorage | IndexedDB | |---------------------|-----------------|--------------------|--------------------|------------------------| | **生命周期** | 可设置过期时间 | 永久 | 会话级 | 永久 | | **储大小** | ~4KB | 5-10MB | 5-10MB | 250MB+ | | **数据形式** | 字符串键值对 | 字符串键值对 | 字符串键值对 | 结构化数据(支持对象) | | **服务器通信** | 自动携带 | 不参与 | 不参与 | 不参与 | | **适用场景** | 身份验证 | 长期配置 | 临时状态 | 复杂查询/离线应用 | --- ### 如何选择? - **简单键值储**:优先选 `localStorage`(长期)或 `sessionStorage`(临时)[^4]。 - **结构化数据/大文件**:使用 `IndexedDB`(支持事务、索引)[^3]。 - **需与服务器交互**:用 `Cookie`(如用户登录态)[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值