node express 会话管理中间件 --- cookie-parser
本文转载自:https://www.cnblogs.com/bq-med/p/8995100.html
cookie是由服务器发送给客户端(浏览器)的小量信息。
我们知道,平时上网时都是使用无状态的HTTP协议传输出数据,这意味着客户端与服务端在数据传送完成后就会中断连接。这时我们就需要一个一直保持会话连接的机制。在session出现前,cookie就完全充当了这种角色。也就是,cookie的小量信息能帮助我们跟踪会话。一般该信息记录用户身份。
当然cookie也常记录跟踪购物车的商品信息(如数量)、记录用户访问次数等。
cookie-parser 的作用就是设置,获取和删除 cookie。
var express = require('express'); //引入cookie-parser模块 var cookieParser = require("cookie-parser"); //创建express实例 var app = express(); // 设定监听端口 app.set('port', process.env.PORT || 3000); //创建cookie实例 app.use(cookieParser()); app.use("/login", function(req,res){ //获取cookie console.log(req.cookies); //设置cookie,关闭签名 res.cookie("user", {username: req.body.username}, {maxAge: 600000 , httpOnly: true, 'signed': false}); }); //监听3000端口 var server = app.listen(app.get('port'),function(){ console.log("创建成功!") });
引入
var cookieParser = require('cookie-parser'); #引入模块 app.use(cookieParser()); #挂载中间件,可以理解为实例化
这两行代码默认在app.js
中写好了,表示现在可以直接使用 cookie 了。
创建cookie
res.cookie(name, value [, options]);
name 是 cookie 名,value 是 cookie 值,可以是 json 对象或字符串。options 是选项,常用选项有:
{ 'maxAge': 90000, # 有效时长,即90000毫秒后过期,String 'signed': false # 默认为false,表示是否签名,Boolean }
创建 cookie 会在 http 响应头中添加Set-Cookie
,从而在浏览器中设置 cookie
获取cookie
var cookies = req.cookies # 获取cookie集合 var value = req.cookies.key # 获取名称为key的cookie的值
删除cookie
res.clearCookie(name [, options])
name 是 cookie 名,options 与创建 cookie 时所传一致
签名
上面所写 cookie 的各种操作,都是没有经过签名的。签名可以提高安全性。下面是使用签名生成 cookie 的方法,大同小异,修改上文即可:
修改实例配置:
app.use(cookieParser('ruidoc')); # 需要传一个自定义字符串作为secret
修改创建cookie配置
# 创建cookie的options中,必填 signed: true res.cookie(name, value, { 'signed': true });
修改获取cookie方式:
var cookies = req.signedCookies # 获取cookie集合 var value = req.signedCookies.key # 获取名称为key的cookie的值
使用cookie记住密码
方案1:
直接把用户名与密码都保持到Cookie中,下次访问时检查Cookie中的用户名与密码,与数据库比较。这是一种比较危险的选择,一般不把密码等重要信息保存到Cookie中。
方案2:
把密码加密后保存到Cookie中,下次访问时解密并与数据库比较。这种方案略微安全一些。如果不希望保存密码,还可以把登录的时间戳保存到Cookie与数据库中,到时只验证用户名与登录时间戳就可以了。
方案3:
实现方式是把账号按照一定的规则(密钥)加密后,连同账号一块保存到Cookie中。下次访问时只需要判断账号的加密规则是否相同即可。