日常开发用到最多的是localStroage,其次是cookie,但浏览器存储还包括sessionStroage、indexDB和webSQL,做一下简略总结。
cookie
大小限制4k;
服务器创建
当服务器收到HTTP请求时,服务器可在响应头里添加Set-Cookie
选项。浏览器收到响应后通常会保存下Cookie,之后对该服务器每一次请求中都通过Cookie请求头部将Cookie信息发给服务器。
响应报文:
1 | HTTP/1.0 200 OK |
之后发送的请求报文:
1 | GET /sample_page.html HTTP/1.1 |
浏览器创建
1 | document.cookie="key=value[; expires=date][; domain=domain][; path=path][; secure][; HttpOnly]" |
键值对
多个赋值时,最好分开:
1 | document.cookie="key=value"; |
网上很多使用分号加空格的,并不能多个赋值。
expires
有效期,不设置会 在浏览器关闭之后被自动删除;
设置格式为GMT时间格式。
1 | const t = new Date( Date.now() + 1000 * 120 ); |
作用域 Domain & Path
Domain 标识指定了哪些host可以接受Cookie。设置Domain=.simmzl.cn
后,子域名可以接受这些host Cookie;
Path 标识指定了host下的哪些路径可以接受Cookie,
例如,设置Path=/docs
,则以下地址都会匹配:
1 | /docs |
安全 secure & HttpOnly
标记为 Secure
的Cookie
只应通过被HTTPS协议加密过的请求发送给服务端。
为避免跨域脚本(XSS)攻击,通过JavaScript的Document.cookie API
无法访问带有 HttpOnly
标记的Cookie
,它们只应该发送给服务端。
1 | Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly |
关于XSS和CSRF
获取cookie
1 | const getCookie = key => { |
修改&删除cookie
修改即重新赋值;
删除就是将该key
设为空,expires
设为过去的时间,正常设为 -1
:
1 | document.cookie="key=; expires=-1"; |
localStroage
HTML5
新加入仅限于该页面的协议
一般浏览器支持的是5M大小
所有的浏览器中都会把
localStorage
的value
定为string
类型,需要使用JSON.parse()
、JSON.stringify()
转换。localStorage在浏览器的隐私模式下面是不可读取的
localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡
localStorage不能被爬虫抓取到
localStroage不能设置过期时间,会一直存在。但是可以手动设置过期时间,下次读取时判断是否过期,只当没过期才读取
创建
1 | localStorage["a"] = 1; |
完善版本:
1 | const cacheSet = (key, value, expire) => { |
读取
1 | localStorage["a"]; |
完善版本:
1 | const cacheGet = key => { |
删除
删除单个:
1 | localStorage.removeItem("a"); |
删除所有:
1 | localStorage.clear(); |
sessionStroage
增删查改和特性与 localStorage
相同,但在新标签或窗口打开一个页面会初始化一个新的会话,浏览器关闭会被清除。
indexDB
IndexedDB 用于客户端存储大量结构化数据(包括文件/ blobs)。该API使用索引来实现对该数据的高性能搜索。虽然 Web Storage 对于存储较少量的数据很有用,但对于存储更大量的结构化数据来说,这种方法不太有用。
但是,实际开发用indexDB场景不多。
web SQL
Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs。
如果你是一个 Web 后端程序员,应该很容易理解 SQL 的操作。要用到SQL语句,差不多就是基于浏览器的SQL,实际开发应用场景不多。
参考
浏览器存储(cookie、localStorage、sessionStorage)
Web Storage API
localStorage使用总结