一、Cookie 简介
● HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页
面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何
关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用Cookie 或者Session 实
现
● cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域
名的时候共享数据。
二、Cookie 特点
● cookie 保存在浏览器本地
● 正常设置的cookie 是不加密的,用户可以自由看到;
● 用户可以删除cookie,或者禁用它
● cookie 可以被篡改
● cookie 可以用于攻击
● cookie 存储量很小。未来实际上要被localStorage 替代,但是后者IE9 兼容。
三、Nestjs 中使用Cookie
NestJs 中使用Cookie 的话我们可以用cookie-parser 来实现。
https://docs.nestjs.com/techniques/cookies#cookies
安装
cnpm instlal cookie-parser --save
cnpm i -D @types/cookie-parser --save
- 在main.ts 中引入cookie-parser
import * as cookieParser from 'cookie-parser' - 在main.ts 配置中间件
app.use(cookieParser()); - 设置cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//HttpOnly 默认false 不允许客户端脚本访问 - 获取Cookies
@Get('getCookies')
getCookies(@Request() req){
return req.cookies.name;
}
四、Nestjs 中Cookie 中的一些参数
属性说明:
domain: 域名
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 而不是res.cookies 访问它。被篡改的签名cookie 会被服务器拒绝,并且
cookie 值会重置为它的原始值
设置cookie
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })
res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true });
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly:
true });
获取cookie
req.cookies.name
删除cookie
res.cookie('rememberme', '', { expires: new Date(0)});
res.cookie('username','zhangsan',{domain:'.ccc.com',maxAge:0,httpOnly:true});
四、Nestjs 中Cookie 加密
配置中间件的时候需要传参 app.use(cookieParser('123456'));
设置cookie 的时候配置signed 属性res.cookie('userinfo','hahaha',{domain:'.ccc.com',maxAge:900000,httpOnly:true,signed:true});
signedCookies 调用设置的cookieconsole.log(req.signedCookies);

Comments | NOTHING