HTML本地存储

HTML本地存储

Posted by Starrynight on 2024-07-07
Estimated Reading Time 3 Minutes
Words 982 In Total
Viewed Times

HTML本地存储

Cookie 是浏览器存储的一小段文本数据,通常用于保存用户会话信息、偏好设置、跟踪用户行为等。它由服务器或客户端 JavaScript 设置,并在后续请求中自动携带到服务器,以维持状态或提供个性化体验。

  • 存储数据量小(通常最大约 4KB)。

  • 可由服务器或 JavaScript 进行读写

  • 会在同一域名下的请求中自动携带(除非设置 HttpOnly)。

  • 可设置过期时间(默认情况下,Session Cookie 在浏览器关闭时删除)。

  • 可限制作用域domainpath 控制访问范围)。

  • 安全性取决于设置(可以使用 SecureHttpOnly 提高安全性)。

1
2
3
4
5
6
7
8
// 设置 Cookie
document.cookie = "username=JohnDoe; expires=Fri, 01 Mar 2025 12:00:00 GMT; path=/";

// 读取 Cookie
console.log(document.cookie); // username=JohnDoe

// 删除 Cookie(设置过期时间为过去)
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/";

2. 使用 HTTP 头设置 Cookie(后端返回)

1
Set-Cookie: sessionId=abc123; Expires=Fri, 01 Mar 2025 12:00:00 GMT; Path=/; Secure; HttpOnly

属性 作用
name=value 设置 Cookie 的键值对
expires 过期时间(如果不设置,Cookie 为 Session Cookie,会话结束后删除)
max-age 以秒为单位的有效时间(比 expires 更精确)
path 限制 Cookie 作用的路径(如 / 表示整个网站)
domain 允许访问 Cookie 的域(默认当前域)
Secure 仅在 HTTPS 连接时发送 Cookie
HttpOnly 仅允许服务器访问,JavaScript 不能访问(防止 XSS)
SameSite 限制跨站请求时是否发送 Cookie(防止 CSRF 攻击)

2.LocalStorage(本地存储)

使用localStorage对象可以在用户的浏览器中存储键值对数据。这些数据会保留在浏览器关闭后,也不会自动发送给服务器。

示例用法:

1
2
3
4
5
6
7
8

localStorage.setItem('key', 'value');

// 获取数据
const value = localStorage.getItem('key');

// 删除数据
localStorage.removeItem('key');

3.SessionStorage(会话存储)

使用sessionStorage对象存储的数据仅在当前会话期间有效。关闭标签页或浏览器后数据将被清除。

示例用法类似于localStorage,但是使用sessionStorage对象。

4.方法对比

特性 Cookie LocalStorage SessionStorage
存储大小 约 4KB 约 5MB 约 5MB
生命周期 过期时间或手动删除 永久存储,需手动删除 仅在会话期间有效
是否随请求发送 是(默认)
可被服务器访问
安全性 易受 XSS 攻击(可用 HttpOnly 保护) 仅受 XSS 影响 仅受 XSS 影响

Cookie 适用于存储少量数据,如身份验证 Token,而 LocalStorage 适用于长期存储大量数据,SessionStorage 适用于临时存储。

2.保留时间

存储方式 浏览器关闭后数据是否保留 适用场景
Cookie(有 expires 跨页面会话、服务器端读取数据(如登录状态)
Cookie(无 expires 会话数据存储(Session Cookie)
LocalStorage 持久存储大量数据,如用户偏好设置
SessionStorage 页面会话内的短期数据

如果需要真正的永久存储,建议使用 LocalStorageexpires 的 Cookie

3.存储格式对比

存储方式 形式 访问方式 是否支持对象
Cookie key=value; 属性=值 document.cookie(需手动解析) ❌ 只能存字符串
LocalStorage { key: value } localStorage.getItem("key") ✅ 需 JSON.stringify()
SessionStorage { key: value } sessionStorage.getItem("key") ✅ 需 JSON.stringify()
  • Cookie 存储格式更复杂,包含 expirespath 等属性,适用于跨页面和服务器交互
  • LocalStorageSessionStorage 仅支持存储字符串,存对象时需要 JSON.stringify()
  • LocalStorage 适用于长期数据SessionStorage 适用于短期数据(仅会话期间有效)

如果你的数据是 简单的键值对,LocalStorage 和 SessionStorage 更方便使用。如果需要 跨页面访问并与服务器交互,Cookie 是更好的选择。


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !