Nestjs中Session的使用

session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而session保存在服务器上。

当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对, 然后将key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带key(cookie),找到对应的session(value)。 客户的信息都保存在session中

1、Nestjs中使用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
			

2、express-session的常用参数

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
}));

3、express-session的常用方法:

	
req.session.destroy(function(err) {   /*销毁session*/

})
req.session.username='张三';   //设置session

req.session.username     //获取session

req.session.cookie.maxAge=0;   //重新设置cookie的过期时间