cookie:为了辨别用户身份而储存在客户端上的数据(通常经过加密)。cookie 通常由服务端生成,客户端维护,主要用于维持用户的状态。cookie 会随请求发送给服务器。(Chrome 每个域名 cookie 限制为 53 个、4097 个字节 4K)
Web Storage:以键值对的形式来存储数据,提供除 cookie 之外存储会话数据的途径。存储限制大于 cookie。
sessionStorage
为每一个给定的源(given origin)维持一个独立的存储区域,该存储区域在页面会话期间可用(即只要浏览器处于打开状态,包括页面重新加载和恢复)。(每个域最大 5MB)localStorage
同样的功能,但是在浏览器关闭,然后重新打开后数据仍然存在。(每个域最大 5MB)
IndexedDB:能存储大量结构化数据,适用于高性能搜索场景。(一般不限制大小、磁盘 50%、超了会 LRU 删某个 TLD 组下的全部)(非关系型数据库、文档)
cookie 字段:
Expires 属性用于设置过期时间,Max-Age 用于设置有效时间段,过期后 cookie 会被删除。
Secure 属性代表 cookie 只会随 HTTPS 请求发送。
HttpOnly 属性代表 cookie 只用于发送给服务端,无法被 JavaScript 访问。
Domain 属性设置可接收 cookie 的 hosts,不设置则默认为当前 host。如果设置了 Domain,子域名也被包含在内。
Path 属性设置可接收 cookie 的 URL path,只有包含指定路径的 url 请求才会带上 cookie。如设置为 “/”,则子路径也包含在内。
SameSite 属性表示跨域时 cookie 的处理策略,包括 Strict, Lax 和 None。
- Strcit:cookie 只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送。
- Lax:cookie 允许与顶级导航一起发送,并将与第三方网站发起的 GET 请求一起发送,这也是浏览器的默认值。
- None:cookie 将在所有上下文中发送,即允许跨域发送。使用 None 时,需在最新的浏览器版本中同时使用 Secure 属性,否则会报错。
cookie 使用不同的方案(
http:
或https:
)发送来自同一域的 cookie,则不再视为来自同一站点。