Web storage
5.25'23
介绍
网页中存储数据有多种方式。如直接存储, localStorage
,sessionStorage
,cookies
,indexedDB
等。那么这些存储方式有什么区别呢?
共性和区别
都属于特定的页面(域),但 cookies 可以在同一主域下的多个子域共享。
JavaScript 脚本直接存储
普通 JavaScript 对象,生命周期与当前网页一致。
localStorage
没有过期时间
localStorage.setItem('key', 'value');
localStorage.getItem('key');
sessionStorage
页面会话。只要浏览器打开,页面重载或恢复后都还存在;浏览器关闭则会清除。
在新的 tab 或 window 中打开页面,会初始化新的sessionStorage。
HTTP cookies
过期时间,默认浏览器决定,可能持续几周。可以通过设置 max-age
expires
修改。
HTTP cookie 是服务器发送给浏览器的一小块数据(set-cookie
)。浏览器对该服务器发送请求时会带回该 cookie,来保持业务状态,让服务器记住发送请求的客户端(cookie
)。
过去,cookie 被浏览器用来存储客户端数据,因为这是以前唯一可选的方式。现在则建议优先使用上述 storage API。
// Read
allCookies = document.cookie;
// Write
document.cookie = "name=oeschger; Secure";
优点
在主域下的多个子域可以共享数据。
缺点
最大 4K。每次请求都会带上。
限制
-
HTTP only (Secure) cookies 无法通过 JavaScript 读取。
-
Cross-domain cookies 无法读取。
axios 中的
withCredentials
只能保证请求带上cookie
,并获取响应的set-cookie
。
参考
document.cookie = "username=John Smith; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";
indexedDB
以 NoSQL 数据库形式,按对象存储。适合大容量数据存储和离线使用。
📖