express访问cookie

概述

最近写的代码中有一部分是使用session保存状态信息的,但是现在都在抵制session,所以就打算用jwt+cookie重构一下.刚好就用到了cookie-parser这个中间件了.
通过cookie-parser可以方便操作客户端中的cookie值.

操作流程

安装

npm i cookie-parser

引入

var app = express();
const cookieParser = require('cookie-parser');
app.use(cookieParser('abcd')); 

参数abcd为cookie签名,后续设置cookie的时候,会对内容进行加密.也可以不传参数(签名),只不过安全性低.

设置cookie

response.cookies('key','value',option)

option的可选参数如下:

domain

域名,设置子域名(二级域名)是否可以访问cookie,例如:domain:'.主域名' 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

默认为false,建议设置为true,客户端将无法通过document.cookie读取到cookie信息,可防止XSS攻击产生

signed

表示是否签名(加密)cookie,设为true会对这个cookie签名,这样就需要用res.signedCookies访问它,前提需要设置上面中间件app.use传参.未签名则用res.cookies访问
被篡改的签名cookie会被服务器拒绝,并且cookie值会重置为它的原始值

res.cookie('gender', 'fale',{ maxAge: 1000 * 60,signed:true});
res.cookie('bag', { items: ['red','yellow','green'] }, { maxAge: 1000 * 30,signed:true,httpOnly:true });
res.cookie('account', 'user1', { maxAge: 1000 * 120,signed:true});

获取cookie

// 已签名过的cookie集合
req.signedCookies

// 根据key获取cookie
req.signedCookies.account

删除cookie

res.cookie('account', '', { maxAge:0 });

参考连接

项目首页