cookie,存储用户本地信息。
cookie 特点
- cookie 保存在浏览器本地,只要不过期,关闭浏览器也会存在。有效期默认一个会话,浏览器关闭即失效。
- 正常情况下 cookie 不加密,用户可轻松看到。
- 用户可以删除或者禁用 cookie。
- cookie 可以被篡改。
- cookie 可用于攻击。
- cookie 存量很小,大小一般为 4k。
- 发送请求自动带上登录信息。
服务器在响应的时候回返回 cookie,浏览器此时可以拿到 cookie,浏览器下次请求时就会自动带上 cookie。
安装
npm install cookie-parser -- save
引入
var cookieParser = require('cookie-parser');
设置中间件
app.use(cookieParser());
如果使用了 express 脚手架安装,则这几步都已自动配置好。
设置 cookie
格式:res.cookie(名称,值,{配置信息})
res.cookie("name",'zhangsan',{maxAge:900000,httpOnly:true})
cookie 参数说明:
- domain:域名。
- name = value:键值对,可以设置要保存的 key/Value,注意这里的 name 不能和其他属性项的名字一样。
- Expires:过期时间(秒),在设置某个时间点hour该 Cookie 就会失效,如 expires=Wednesday,09-Nov-99 23:12:40 GMT。
- maxAge:最大失效时间(毫秒),设置在多少后失效。
- secure:当 secure 值为 true 时,cookie 在 HTTP 中时无效,在 HTTPS 中才有效。
- Path:表示在哪个路由下可以访问到 cookie。
- httpOnly:是微软对 cookie 做的扩展。如果在 cookie 中设置了 “httpOnly” 属性,则通过程序(JS 脚本、applet 等)将无法读取到 cookie 信息,防止 XSS 攻击的产生。
- singed:表示是否签名 cookie,设置为 true 会对这个 cookie 签名,这样就需要用 res.signedCookies 而不是 res.cookies 访问它。被篡改的签名 cookie 会被服务器拒绝,并且 cookie 值会重置为它的原始值。
router.get('/setcookie',function(req,res){
// 基础设置 cookie,有效期默认为 1 个会话,浏览器关闭即失效。
res.cookie("isLogin","true");
//也可以设置失效时间 30 s
//res.cookie("isLogin","true",{maxAge:30000});
res.send("cookie 设置成功")
})
获取 cookie
req.cookie.name;
router.get('admin',function(req,res){
console.log(req.cookies)
if(req.cookies.isLogin == 'true'){
res.send("登录成功");
}else{
res.send("登录失败");
}
})
cookie 加密
app.js
app.use(cookieParser('secret'));
index.js
router.get('/setcookie',function(req,res){
res.cookie("isLogin","true",{signed:true});
res.send("cookie 设置成功")
})
获取加密后的 cookie :
router.get('admin',function(req,res){
console.log(req.signedCookies)
if(req.signedCookies.isLogin == 'true'){
res.send("登录成功");
}else{
res.send("登录失败");
}
})
网友评论