session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而session保存在服务器上。
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对, 然后将key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带key(cookie),找到对应的session(value)。 客户的信息都保存在session中
NestJs中的Session可以使用express-session实现:https://docs.nestjs.com/techniques/session#session
1.安装 express-session
npm i express-session --save npm i -D @types/express-session --save
2.引入express-session
import * as session from 'express-session';
3.配置session中间件
app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))
4.nestjs中使用session
设置值 req.session.username = "张三"; 获取值 req.session.username
secret 一个String类型的字符串,作为服务器端生成session的签名。 name 返回客户端的key的名称,默认为connect.sid,也可以自己设置。 resave 强制保存session即使它并没有变化,。默认为true。建议设置成false。 don't save session if unmodified saveUninitialized 强制将未初始化的session存储。当新建了一个session且未设定属性或值时,它就处于 未初始化状态。在设定一个cookie前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。(默认:true)。建议手动添加。 cookie 设置返回到前端key的属性,默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。 rolling 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)代码
app.use(session({ secret: '12345', name: 'name', cookie: {maxAge: 60000}, resave: false, saveUninitialized: true }));
req.session.destroy(function(err) { /*销毁session*/ }) req.session.username='张三'; //设置session req.session.username //获取session req.session.cookie.maxAge=0; //重新设置cookie的过期时间