cookie
- 是有限制的,只能在相同的域名下
- 是存储在浏览器上的,不是存在某个页面上的,是可以长期存储的。
- 即使保存在浏览器里,也是存放在不同域名下的。
- 发送请求时,请求头会自动携带cookie
缺点:复制cookie信息 可以在别处使用
xss注入攻击,获取你的cookie,获取用户信息
操作cookie
添加
document.cookie = 'name=value'
只能添加一个cookie 只有一个有效
document.cookie = 'name=value; name2=value2'
属性
name cookie名称
value cookie值
domain 设置cookie在那个域名下 默认是当前页面域名
path cookie的路径 默认是当前页面路径 //path=127.0.0.1;
expiess cookie过期时间GMT时间(new Date() 返回GMT格式时间)设置到具体时间点过期 如17:00 过期
// document.cookie = 'name=value;expiess='+new Date(2008, 1, 1); // 设置到 2008/1/1 过期
max-age cookie有效期 单位s 设置时间段过期 如3天后过期
// document.cookie = 'name=value;max-age=1'; //一秒后过期
httpOnly 有这个标记的cookie前端是无法获取的
Secure 设置cookie只能通过https协议传输
SameSite 设置cookie 在跨越请求的时候不能被发送
cookie 使用封装
const manageCookie = {
set(name, value, date = null) {
// 设置cookie
if (date != null) {
// expires 要求传入过期时间节点(天)
// var endDate = new Date()
// endDate.setDate(endDate.getDate() + date)
// document.cookie = name + '=' + value +'; expires='+ endDate
// max-age 传入过期秒
document.cookie = name + "=" + value + "; max-age=" + date;
} else {
document.cookie = name + "=" + value;
}
},
// 设置cookie
remove(name) {
this.set(name, "", 0); // 只需要设置时间0
},
get(name) {
let cookie = document.cookie.split('; ');
let value;
cookie.find(item=>{
let arr = item.split('=')
if(arr[0] == name) {
value = arr[1]
return true
}
})
return value
},
};
session
- 是存储在服务器的
缺点:如果用户量非常大,服务器端很耗资源的。
因为后端可能不止一台服务器,而用户的登录信息,一般只存在一台服务器上。因为用户的登录操作,在那台机器上执行,就一般存在那台机器上。需要通过反向代理。(轮询,IP哈希:相同的IP地址会访问到同一个服务器上)