cookie-parser和express-session中间件使用

3,660 阅读3分钟

cookie-paeser中间件简介

cookie-parser是Express的中间件,用来实现cookie的解析。为了方便操作客户端中的cookie值。相当于服务端将信息存在cookie里面,那么客户端可以获取通过cookie获取值。比如cookie一般用来记录用户的登录信息。

express-session中间件简介

上面说的客户端可通过cookie来获取值的,那么服务端就是通过session。 session是服务器记录用户状态信息的技术,当客户端首次请求服务器时,服务器会为该客户端创建一个唯一的对象,称之为session对象。即是种session存cookie的过程。

如何在Express中使用cookie-parser

安装cookie-parser

//安装
npm i cookie-parser --save

在app.js配置

//app.js文件,引入中间件
var cookieParser = require('cookie-parser')
//配置中间件
app.use(cookieParser());

如何设置cookie

注意是res去做设置

//设置cookie
res.cookies('key','value',option);

option 的具体配置如下,可供参考: domain: 域名。设置子域名(二级域名)是否可以访问cookie。

name=value:键值对,可以设置要保存的 Key/Value,注意这里的 name 不能和其他属性项的名字一样

expires: 过期时间(秒),在设置的某个时间点后该 Cookie 就会失效,如 expires=Wednesday,09-Nov-99 23:12:40 GMT

maxAge: 最大失效时间(毫秒),设置在多少后失效

secure: 当 secure 值为 true 时, cookie 在 HTTP 中是无效,在 HTTPS 中才有效

path: 表示 cookie 影响到的路由,如 path=/。如果路径不能匹配时,浏览器则不发送这个 Cookie

httpOnly: 是微软对 COOKIE 做的扩展。如果在 COOKIE 中设置了“httpOnly”属性,则通过程序(客户端)(JS脚本、 applet 等)将无法读取到 COOKIE 信息,防止 XSS 攻击产生

signed: 表示是否签名(加密) cookie, 设为 true 会对这个 cookie 签名,这样就需要用res.signedCookies 访问它,前提需要设置上面中间件app.use传参 。未签名则用 res.cookies 访问。

如何删除cookie

//删除cookie
res.cookie('username', 'zhangsan', { maxAge:0 });

如何加密cookie

(1) 在配置中间件时传参数,什么参数都行

app.use(cookieParser('123456'));

(2)在设置属性的是添加属性=》signed:true

res.cookie('username',name, {maxAge:1000 * 60 * 60 * 24 * 7,signed:true});		//设置cookie的保存时间,7天为例

如何获取cookie

注意是req去做设置 (1)获取没加密的cookie

req.cookies.XXXX
req.cookies.username

(2)获取加密的cookie

req.signedCookies.XXXX
req.signedCookies.username

如何在Express中使用express-session

安装express-session

//安装
npm i express-session --save

如何在app.js配置express-session

引入之后做配置:

let session = require("express-session");		
app.use(session({
	secret: '123456',
    resave: false,
    saveUninitialized: true
}));

session的参数如下: name: 设置 cookie 中,保存 session 的字段名称,默认为 connect.sid 。 store: session 的存储方式,默认存放在内存中,也可以使用 redis,mongodb 等。express 生态中都有相应模块的支持。 secret: 通过设置的 secret 字符串,来计算 hash 值并放在 cookie 中,使产生的 signedCookie 防篡改。 cookie: 设置存放 session id 的 cookie 的相关选项,默认为 (default: { path: ‘/’, httpOnly: true, secure: false, maxAge: null }) genid: 产生一个新的 session_id 时,所使用的函数, 默认使用 uid2 这个 npm 包。 rolling: 每个请求都重新设置一个 cookie,默认为 false。 resave: 即使 session 没有被修改,也保存 session 值,默认为 true。

如何种session

req.session.XXX=VALUE
//例如:
req.session.auth_username=name

如何取session

req.session.XXX
req.session.auth_username

如何删除销毁session

req.session.XXX=undefined;
req.session.auth_password=undefined;

在Express框架使用这个两个中间件之后,浏览器的效果如下:

请求头的图片
cookie的图片

总结

以上这个就是这两个中间件在Express项目的使用,具体在什么业务场景下使用可参考我的另外一篇博文nodejs+express框架实现登录过滤器以及用户登入状态的保存