浏览器存储类别
- cookie
- localStorage
- sessionStore
- indexDb
cookie
什么是cookie?
Cookie是服务器委托浏览器存储的一些数据,它让服务器有了记忆能力,会再浏览器下次请求时携带并发送到服务器上
cookie的生存周期
- expires:过期时间,时间戳,尼格林治时间
- Max-Age:用的时相对时间,单位是秒,浏览器接收到报文的时间点再加上Max-Age,就可以得到失效的绝对时间 【祝】Expires和Max-Age可以同时出现,Max-Age优先级更高
cookie的作用域
- Domain和Path指定了cookie所属的域名和路径,浏览器在发送Cookie前会从URI中提取出host和path部分,对比Cookie属性如果不满足就不回在请求头中发送Cookie
Cookie的安全性
- HttpOnly: Cookie只能通过浏览器Http协议传输,禁止其它方式访问,比如JS访问Cookie,减少XSS攻击
- SameSite:可以防范XSRF(跨站请求伪造)攻击,可以设置Strict严格限定不能随着跳转链接跨站发送,设置Lax则略宽松一点允许get/Head方法携带,post方式禁止
- Secure: 只允许https协议加密传输
cookie的特点
- 数据生命周期: 一般由服务器生成,可以设置过期时间
- 数据存储大小: Cookie的大小受限一般是4Kb
- 与服务器通信:每次发起同域下的HTTP请求时子在,header中携带Cookie
localStorage
浏览器中持久化存储方式,以键值对的方式存储数据,按域名将数据分别保存
localStorage的特点
- 生命周期:除非被清理否则会一直村子
- 数据存储的大小:5M
localStorage的使用
//设置数据 setItem()
localStorage.setItem('name','vincent')
//获取数据 getItem()
localStore.getItem('name')
//移除数据 removeItem()
localStore.removeItem('name')
//清楚数据 clearItem()
localStorage.clear()
一个可以定时过期的功能
(function(){
let getItem = loaclStorage.getItem.bind(localStorage)
let setItem = localStorage.setItem.bind(localStorage)
let removeItem = localStorage.removeItem.bind(localStorage)
localStorage.getItem = function(keyName){
let expires = getItem(keyName+'_expires')
if(expires && new Date()>new Date(Number(expires))){
removeItem(keyName)
}
})