| 对比 | ||||
|---|---|---|---|---|
| 属性 | Cookie | LocalStorage | SessionStorage | IndexedDB |
| 持久性 | 根据过期时间。如果没有指定过期时间,则被移除之前一直有效 | 移除之前一直有效 | 当前页面关闭之前一直有效 | 移除之前一直有效 |
| 是否可以阻止js访问 | 是 | 否 | 否 | 否 |
| 是否在每个请求中自动发送 | 是(根据请求的域名和路径) | 否 | 否 | 否 |
| 可强制使用HTTPS | 是 | 否 | 否 | 否 |
| 大小限制 | 4KB | 5MB | 5MB | 桌面应用50MB,移动设备5MB。可以在用户许可下存储更多 |
| 数据类型 | 键值对。键值都是字符串 | 键值对。键值都是字符串 | 键值对,键值都是字符串 | 键值对。支持许多数据类型,并支持复杂的查询 |
| 作用域 | 独立域名或子域名 | 独立域名或子域名 | 独立域名,每个浏览器tab页 | 独立域名,子域名不可以 |
cookie
浏览器与服务端网络通信时,正常情况下,http报文都会携带cookie供服务端获取,同样,服务端也可在返回信息时,通过set-cookie对客户端进行cookie设置,并且可以通过httpOnly禁止被js读取,防止攻击 浏览器会自动携带cookie
//在node中获取cookie
npm install cookie-parser --save
const express = require('express')
const app = express();
const cookieParser = require('cookie-parser');
app.use(cookieParser());
app.get('/views', (req, res) => {
console.log(req.cookies);
res.send("测试")
})
//前端
// 解决后端跨域获取不到cookie问题(允许请求的时候带上cookie)
axios.defaults.withCredentials = true