一、能够控制cookie的安全性
可以通过设置cookie的 httponly
和 secure
属性来控制cookie的安全性。
httponly
属性可以防止cookie被JavaScript攻击,保护用户的身份认证信息。
secure
属性可以保证cookie只能在HTTPS协议下传输,避免cookie被中间人攻击,保障用户隐私。
// 设置具有httponly和secure属性的cookie
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly;
二、cookie劫持与防范
cookie劫持是指黑客通过各种手段获取用户的cookie,从而进行恶意攻击。 可以通过以下几种方式来防范cookie劫持:
- 使用JWT(JSON Web Token)代替cookie存储用户身份信息。
- 使用双因素认证,增加黑客攻击的难度。
- 设置cookie的
httpOnly
和secure
属性,防止JavaScript等攻击方式。
// 使用JWT生成token
const jwt = require('jsonwebtoken');
const token = jwt.sign({ user: 'username' }, 'secret');
// 存储token
localStorage.setItem('token', token);
三、cookie和Session的区别
cookie和session都是用于存储用户身份信息的方式,但是它们有以下几个不同点:
- cookie存储在本地,session存储在服务器。
- cookie具有过期时间,session的过期时间由服务器控制。
- cookie的大小受限制,session可以存储大量数据。
// 存储session
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}))
四、cookie和localStorage的区别
cookie和localStorage都是用于存储数据的,但是它们有以下几个不同点:
- cookie存储在本地且会随着HTTP请求一起发送到服务器,localStorage只存在于浏览器端。
- cookie容量受限制,localStorage可以存储大量数据。
- cookie通过设置
domain
属性可以在多个子域名中共享,localStorage不能跨域共享。
// 存储localStorage
localStorage.setItem('token', 'value');
// 读取localStorage
const token = localStorage.getItem('token');
五、cookie的删除和清除
可以通过以下几种方式来删除或清除cookie:
- 手动删除cookie。
- 过期时间设置为0,等待浏览器自动清除cookie。
- 调用NPM库如
cookie-parser
进行删除或清除。
// 手动删除cookie
document.cookie = 'token=; expires=Thu, 01 Jan 1970 00:00:00 UTC;';
// 过期时间设置为0
Set-Cookie: id=a3fWa; Expires=Thu, 01 Jan 1970 00:00:00 UTC;