文章问题导向
如何使用cookie?
如何使用session?
它们参数对应的意思是什么?
如果你都有了答案,可以忽略本文章,或去nest学习导图寻找更多答案
使用前注意
cookie和session的使用依赖于当前使用的平台,如:express和fastify
两种的使用方式不同,这里主要记录基于express平台的用法
使用cookie
第一步:安装
yarn add cookie-parser @nestjs/platform-express
第二步:引入-注册
main.ts
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
import * as cookieParser from 'cookie-parser'
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
//注册cookie
app.use(cookieParser('dmyxs')); //加密密码
await app.listen(3000);
}
bootstrap();
第三步:接口中设置cookie~使用response
请求该接口,响应一个cookie
@Get()
index(@Response() res){
//设置cookie, signed:true加密
//参数:1:key, 2:value, 3:配置
res.cookie('username', 'tao', {maxAge: 1000 * 60 * 10, httpOnly: true, signed:true})
//注意:
//使用res后,返回数据必须使用res
//如果是用了render模板渲染,还是使用return
res.send({xxx})
}
cookie相关配置参数
domain String 指定域名下有效
expires Date 过期时间(秒),设置在某个时间点后会在该cookoe后失效
httpOnly Boolean 默认为false表示不允许客户端(通过js来获取cookie)
maxAge String 最大失效时间(毫秒),设置在多少时间后失效
path String 表示cookie影响到的路径,如:path=/如果路径不能匹配的时候,浏览器则不发送这个cookie
secure Boolean 当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效
signed Boolean 表示是否签名cookie,如果设置为true的时候表示对这个cookie签名了,这样就需要用res.signedCookies()获取值cookie不是使用res.cookies()了
第四步:获取cookie
@Get()
index(@Request() req){
console.log(req.cookies.username)
//加密的cookie获取方式
console.log(req.signedCookies.username)
return req.cookies.username
}
使用session
第一步:安装
yarn add express-session @nestjs/platform-express
第二步:引入-注册
main.ts
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
import * as session from 'express-seesion'
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
//配置session
app.use(session({
secret: 'dmyxs',
cookie: { maxAge: 10000, httpOnly: true }, //以cookie存储到客户端
rolling: true //每次重新请求时,重新设置cookie
}))
await app.listen(3000);
}
bootstrap();
session相关配置参数
secret String 生成session签名的密钥
name String 客户端的cookie的名称,默认为connect.sid, 可自己设置
resave Boolean 强制保存 session 即使它并没有变化, 默认为true, 建议设置成false
saveUninitalized Boolean 强制将未初始化的 session 存储。当新建了一个 session 且未设定属性或值时,它就处于 未初始化状态。在设定一个 cookie 前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。默认:true, 建议手动添加
cookie Object 设置返回到前端cookie属性,默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。
rolling Boolean 在每次请求时强行设置 cookie,这将重置 cookie 过期时间, 默认为false
第三步:接口中设置session
@Get()
@Render('default/user')
index(@Request() req){
//设置session
req.session.username = 'tao'
}
第四步:获取session
@Get('/session')
session(@Request() req, @Session() session ){
//获取session:两种方式
console.log(req.session.username)
console.log(session.username)
return 'hello session'
}
学习更多