# 文章导读
cookie-parser是Express的中间件,用来实现cookie的解析,是官方脚手架内置的中间件之一。
它的使用非常简单,但在使用过程中偶尔也会遇到问题。一般都是因为对Express + cookie-parser的签名、验证机制不了解导致的。
本文深入讲解Express + cookie-parser的签名和验证的实现机制,以及cookie签名是如何增强网站的安全性的。
# 入门例子:cookie设置与解析
先从最简单的例子来看下cookie-parser的使用,下面采用默认配置。
- cookie设置:使用
Express的内置方法res.cookie。 - cookie解析:使用
cookie-parser中间件。
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.use(function (req, res, next) {
console.log(req.cookies.nick); // 第二次访问,输出chyingp
next();
});
app.use(function (req, res, next) {
res.cookie('nick', 'chyingp');
res.end('ok');
});
app.listen(3000);
@前端进阶之旅: 代码已经复制到剪贴板
在当前场景下,cookie-parser中间件大致实现如下:
app.use(function (req, res, next) {
req.cookies = cookie.parse(req.headers.cookie);
next();
});
@前端进阶之旅: 代码已经复制到剪贴板
# 进阶例子:cookie签名与解析
出于安全的考虑,我们通常需要对cookie进行签名。
例子改写如下,有两个注意点:
cookieParser初始化时,传入secret作为签名的秘钥。- 设置cookie时,将
signed设置为true,表示对cookie进行签名。 - 获取cookie时,可以同时通过
req.cookies,也可以通过req.signedCookies获取。
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
// 初始化中间件,传入的第一个参数为singed secret
app.use(cookieParser('secret'));
app.use(