2025年08月01日 Tags: Js
参考链接:
MDN:
其他:
HTTP 请求标头,可通过服务器设置 Set-Cookie
表头或 js 通过 document.cookie
进行设置。
4KB
Cookie: key1=value1; key2=value2 ...
键值对以“分号+空格”进行分隔。
根据是否设置过期时间(Expires
)和有效期(Max-Age
)分为会话期 Cookie 和 持久性 Cookie。
会话期 Cookie 存储在内存中,持久性 Cookie 存储在硬盘中。
Secure
未设置或值为 Lax
,然后对于“安全”的顶级导航(GET
请求,且是顶级导航,比如用户点击链接或重定向),Cookie 仍会被发送。HttpOnly=true; Secure=true; SameSite=Strict
)通常,服务器在收到首个 HTTP 请求后,在响应头例添加一个或多个 Set-Cookie
选项,浏览器收到响应后通常会保存 Cookie,并将其放在 HTTP Cookie 标头内,在向同一服务器发出请求时一起发送。
response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']);
响应体:
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: type=ninja
Set-Cookie: language=javascript
后续请求头:
Cookie: type=ninja; language=javascript
前端获取 Cookie 值的方式:
HttpOnly
的 Cookie 除外)🧐通过
document.cookie
获取到 cookie 字符串后如何处理,方便后续使用?
存储数据为字符串,因此对象格式的数据存储需要转换成 JSON 格式。
5MB-10MB 不等,一般现代浏览器至少会分配 5MB 空间,实际大小受设备实际存储空间用量动态分配。
通常是内存中。
<a target="_blank" href="url_or_path" rel="opener"></a>
window.location.href = url
window.open(url, ...)
如果 a 标签没有添加
rel="opener"
属性,跳转时是不会复制顶级页面的 sessionStorage 的。这是因为 Chrome 89 版本更新后,通过 a 标签target="_blank"
跳转会导致 sessionStorage 丢失,原因是默认添加了noopener
属性。
const myStorage = {
set(key, value) {
const time = Date.now();
localStorage.setItem(key, JSON.stringify({ time, value }));
},
get(key) {
const valueJson = localStorage.getItem(key);
if (!valueJson) return null;
const { time, value } = JSON.parse(valueJson);
const expiresTime = 60;
if (Date.now() - time > expiresTime) {
localStorage.removeItem(key);
return null;
} else {
return value;
}
}
}
🧐如何用代码控制 localStorage 用量?
❓Safari 的无痕浏览模式
一个事务型数据库系统,是一个基于 JavaScript 的面向对象数据库。
多达几个GB,受设备实际存储空间用量动态分配。
本地磁盘
待探索: