cookie是浏览器中特有的一个概念目前常见的浏览器离线存储的方式如下:

  • Cookie

  • Web Storage

  • WebSQL

  • IndexedDB

  • File System

这是最古老、也是最初并非为“存储”而设计的技术。

设计初衷:主要用于在客户端存储会话状态信息(如登录状态),并在每次请求中由浏览器自动发送到服务器。

存储容量:很小,通常每个域名下限制为 4KB 左右。

生命周期

  • 会话期Cookie:浏览器关闭即消失。

  • 持久性Cookie:通过 Max-AgeExpires 属性设置过期时间。

数据操作:通过 JavaScript 的 document.cookie API 进行读写,操作相对繁琐。

服务器参与:每次HTTP请求都会自动携带,这会增加网络开销。

主要应用场景

  • 用户身份认证(Session ID)。

  • 个性化设置(如主题选择)。

  • 跟踪用户行为(如分析工具)。


2. Web Storage

HTML5 引入的简单键值对存储机制,旨在克服 Cookie 在存储上的不足。它分为两种:

localStorage

  • 持久性:数据永久存储,除非手动清除(通过JS或浏览器设置)。

  • 作用域:在同源(协议、域名、端口相同)的窗口/标签页中共享。

  • 容量:通常为 5MB 或更大(因浏览器而异)。

  • 特点:数据不会随HTTP请求发送到服务器。

sessionStorage

  • 会话性:数据仅在当前浏览器标签页的生命周期内有效。关闭标签页,数据即被清除。

  • 作用域:仅在当前标签页内共享,即使是同源页面也无法访问。

  • 容量:同 localStorage。

  • 特点:同样不发送到服务器。

主要应用场景

  • localStorage:存储长期使用的数据,如用户偏好设置、购物车内容、静态资源缓存。

  • sessionStorage:存储单次会话的临时数据,如表单填写过程中的多页数据暂存。


3. WebSQL(已废弃)

WebSQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs,但已被 W3C 废弃

特点:使用 SQL 语法进行数据操作,对于有后端SQL经验的开发者非常友好。

现状:虽然一些老旧浏览器(如旧版Chrome、Safari)仍支持,但不再是Web标准。不推荐在新项目中使用

替代方案IndexedDB


4. IndexedDB

现代浏览器推荐的客户端大规模、结构化数据存储方案。

数据模型:一个非关系型(NoSQL) 的面向对象数据库。数据以“对象存储”为单位,在存储中直接存储 JavaScript 对象。

存储容量:通常非常大,根据浏览器和磁盘空间而定,一般是硬盘的某个百分比(如Chrome是可用空间的60%)。

查询方式:使用索引进行高性能查询,支持游标遍历。

事务性:支持事务,保证数据操作的原子性。

异步API:所有操作都是异步的,不会阻塞浏览器UI线程。

主要应用场景

  • 存储大量结构化数据(如邮件、笔记、文档)。

  • 渐进式Web应用(PWA)的核心技术,用于缓存数据和资源,实现离线工作。

  • 需要复杂查询和排序的大型客户端应用。


5. File System

这里的 File System 通常指 File System Access API 和较早的 File and Directory Entries API

能力:允许Web应用直接访问用户设备上的文件系统,进行文件的读写、创建和管理

访问方式

  • 沙盒文件系统:一个浏览器为网页分配的私有存储空间,网页可以自由读写,但用户无法通过文件管理器直接访问。

  • 用户授权访问:通过API(如 showOpenFilePicker)请求用户授权,从而读写用户指定的具体文件或目录。

主要应用场景

  • 离线视频/图片编辑器。

  • 大型媒体文件(如PDF、视频)的缓存和处理。

  • 需要持久化保存用户生成文件的应用(如IDE、绘图工具)。

可惜截止目前为止(2025年10月)只有Chrome,Edge,Opera支持


会话期 Cookie

持久性 Cookie

sessionStorage

localStorage

IndexedDB

WebSQL

存储大小

4kb

4kb

2.5~10MB

2.5~10MB

>250MB

已废弃

失效时间

浏览器关闭自动清除

设置过期时间,到期后清除

浏览器关闭后清除

永久保存(除非手动清除)

手动更新或删除

已废弃