浏览器存储

本文探讨了浏览器存储中的短暂性和持久性储存,重点关注浏览器端的Cookie和Local Storage。Cookie用于存储用户身份和登录状态,体积上限为4KB,可设置过期时间;Local Storage则在窗口关闭后仍能保留,体积限制为5MB。尽管Cookie已不推荐用于大量数据存储,但它们在特定场景下仍有用武之地。理解Cookie的安全性,如名称、值、过期时间、路径、域名、大小和HTTPOnly属性,对于正确使用和保护用户数据至关重要。

我们经常需要对业务中的一些数据进行存储,通常可以分为 短暂性存储 和 持久性储存。

  • 短暂性的时候,我们只需要将数据存在内存中,只在运行时可用
  • 持久性存储,可以分为 浏览器端 与 服务器端
    • 浏览器:
      • cookie: 通常用于存储用户身份,登录状态等
        • http 中自动携带, 体积上限为 4K, 可自行设置过期时间
      • localStorage / sessionStorage: 长久储存/窗口关闭删除, 体积限制为 4~5M
      • indexDB
    • 服务器:
      • 分布式缓存 redis
      • 数据库

cookie和localSrorage、session、indexDB 的区别

特性cookielocalStoragesessionStorageindexDB
数据生命周期一般由服务器生成,可以设置过期时间除非被清理,否则一直存在页面关闭就清理除非被清理,否则一直存在
数据存储大小4K5M5M无限
与服务端通信每次都会携带在 header 中,对于请求性能影响不参与不参与不参与

从上表可以看到,cookie 已经不建议用于存储。如果没有大量数据存储需求的话,可以使用 localStoragesessionStorage 。对于不怎么改变的数据尽量使用 localStorage 存储,否则可以用 sessionStorage 存储。

对于 cookie,我们还需要注意安全性

属性作用
value如果用于保存用户登录态,应该将该值加密,不能使用明文的用户标识
http-only不能通过 JS访问 Cookie,减少 XSS攻击
secure只能在协议为 HTTPS 的请求中携带
same-site规定浏览器不能在跨域请求中携带 Cookie,减少 CSRF 攻击

  • Name,即该 Cookie 的名称。Cookie 一旦创建,名称便不可更改。
  • Value,即该 Cookie 的值。如果值为 Unicode 字符,需要为字符编码。如果值为二进制数据,则需要使用 BASE64 编码。
  • Max Age,即该 Cookie 失效的时间,单位秒,也常和 Expires 一起使用,通过它可以计算出其有效时间。Max Age如果为正数,则该 CookieMax Age 秒之后失效。如果为负数,则关闭浏览器时 Cookie 即失效,浏览器也不会以任何形式保存该 Cookie
  • Path,即该 Cookie 的使用路径。如果设置为 /path/,则只有路径为 /path/ 的页面可以访问该 Cookie。如果设置为 /,则本域名下的所有页面都可以访问该 Cookie
  • Domain,即可以访问该 Cookie 的域名。例如如果设置为 .zhihu.com,则所有以 zhihu.com,结尾的域名都可以访问该 CookieSize 字段,即此 Cookie 的大小。
  • Http 字段,即 Cookiehttponly 属性。若此属性为 true,则只有在 HTTP Headers 中会带有此 Cookie 的信息,而不能通过 document.cookie 来访问此 Cookie。
  • Secure,即该 Cookie 是否仅被使用安全协议传输。安全协议。安全协议有 HTTPS、SSL 等,在网络上传输数据之前先将数据加密。默认为 false
<think>好的,用户想知道浏览器存储多少K。首先,我需要明确“浏览器存储”具体指的是什么,因为浏览器有多种存储方式,比如Cookie、Web Storage(localStorage和sessionStorage)、IndexedDB、Web SQL(已废弃)、Cache API等。不同的存储方式有不同的容量限制,用户可能没有明确指哪一种,所以需要分别介绍。 接下来,我需要回忆各种存储方式的容量限制。首先是Cookie,通常每个域名下最多允许50个左右,每个Cookie大小约4KB,总容量大概200KB左右。然后是Web Storage,也就是localStorage和sessionStorage,大多数现代浏览器允许每个域名5MB左右,但有些可能到10MB。IndexedDB的容量更大,通常每个域名可以到50MB以上,甚至根据浏览器和用户设置可能更多。Cache API属于Service Worker的一部分,通常和IndexedDB类似,但可能受浏览器整体存储限制的影响,比如Chrome允许每个源最多使用80%的磁盘空间,具体可能到几百MB甚至GB级别。 用户的问题提到“多少K”,可能更关注较小的存储方式,比如Cookie或Web Storage,但需要确认是否包括所有类型。另外,需要注意不同的浏览器可能会有不同的实现,比如Safari和Chrome在localStorage的限制上可能不同,移动端和桌面端也可能有差异。此外,用户可能还关心超出限制时的处理,比如浏览器会抛出错误,需要捕获异常。 需要组织回答的结构,先分点列出每种存储方式的容量,再比较它们的区别和适用场景。同时提醒用户实际使用时要考虑不同浏览器的兼容性和限制,以及存储数据时的错误处理。可能还需要提到用户权限,例如IndexedDB在需要更多空间时可能会提示用户授权。 另外,需要确认是否有最新的数据,因为浏览器版本更新可能会调整存储限制。例如,某些浏览器可能提高了IndexedDB的默认配额,或者引入了动态调整的策略。最后,总结建议根据具体需求选择合适的存储方式,并注意处理存储超限的情况。</think>浏览器存储容量因不同存储方式而异,以下是常见存储类型及其容量限制的详细说明: --- ### 1. **Cookie** - **容量**:单个域名下所有Cookie总大小约 **4KB(4096字节)** - **特点**: - 每个Cookie最大4KB,每个域名最多允许约50个Cookie(不同浏览器有差异) - 每次HTTP请求都会携带Cookie数据,影响性能 - **适用场景**:小规模会话管理(如用户登录态) --- ### 2. **Web Storage(localStorage/sessionStorage)** - **容量**:**5~10MB/域名**(不同浏览器不同) - Chrome/Firefox:约5MB - Safari:约5MB(移动端可能更小) - 超出容量会触发`QuotaExceededError`错误 - **特点**: - 数据永久存储(localStorage)或会话级存储(sessionStorage) - 仅存储字符串,需手动序列化对象(如`JSON.stringify`) - **适用场景**:中小规模持久化数据(如用户偏好设置) --- ### 3. **IndexedDB** - **容量**:**动态分配**,通常初始为 **50MB/域名**,可申请扩容 - 浏览器可能提示用户授权扩容(如Chrome允许单个源使用最多80%的磁盘空间) - 实际上限可达数百MB甚至GB(取决于用户设备) - **特点**: - 支持结构化数据、事务操作、索引查询 - 异步API,适合存储大量数据 - **适用场景**:离线应用、大型结构化数据(如本地数据库) --- ### 4. **Cache API(Service Worker缓)** - **容量**:与IndexedDB类似,通常**50MB~数百MB/域名** - 浏览器自动管理,可能清除不常用缓 - 可通过`navigator.storage.estimate()`查询剩余空间 - **适用场景**:离线资源缓(PWA应用的核心技术) --- ### 5. **Web SQL(已废弃)** - **容量**:早期约**5~50MB/域名**(现代浏览器已弃用,不推荐使用) --- ### **总结与建议** 1. **小数据(KB级)**:优先使用Cookie或Web Storage 2. **中大数据(MB级)**:选择IndexedDB或Cache API 3. **容量查询**:通过代码动态检测剩余空间: ```javascript navigator.storage.estimate().then(estimate => { console.log(`已用:${estimate.usage}字节,剩余:${estimate.quota}字节`); }); ``` --- ### **注意事项** - **浏览器差异**:不同浏览器/设备可能有不同限制(建议测试目标环境) - **清理策略**:浏览器可能自动清理长期未访问的数据 - **异常处理**:写入数据时需捕获`QuotaExceededError`错误 实际开发中应根据数据大小、访问频率和持久性需求选择合适方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小码哥・Martin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值