一、Session 简单介绍

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

    二、Session 的工作流程

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

    三、NestJS 中 express-session 的使用

  • https://docs.nestjs.cn/8/techniques?id=session%e4%bc%9a%e8%af%9d

  • 安装 express-session

    1. npm i express-session --save
    2. npm i -D @types/express-session --save
  • 引入 express-session

    1. import * as session from 'express-session';
  • 设置官方文档提供的中间件

    1. app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))
  • 使用 ```typescript @Get(‘setSession’) setSession(@Request() req) { // 设置 session req.session.username = “张三”; }

@Get(‘getSession’) getSession(@Request() req) { // 获取 session return req.session.username }

  1. <a name="OkQtl"></a>
  2. ### 四、express-session 的常用参数
  3. | secret | 一个 String 类型的字符串,作为服务器端生成 session 的签名 |
  4. | --- | --- |
  5. | name | 返回客户端的 key 的名称,默认为 connect.sid,也可以自己设置 |
  6. | resave | 强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。 don't save session if unmodified |
  7. | saveUninitialized | 强制将未初始化的 session 存储。当新建了一个 session 且未设定属性或值时,它就处于 未初始化状态。在设定一个 cookie 前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。默 认:true)。建议手动添加 |
  8. | cookie | 设置返回到前端 key 的属性,默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null } |
  9. | rolling | 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false) |
  10. <a name="SGjnt"></a>
  11. ### 五、express-session 的常用方法
  12. ```typescript
  13. req.session.destroy(function (err) { /*销毁 session*/ })
  14. req.session.username = '张三'; //设置 session
  15. req.session.username //获取 session
  16. req.session.cookie.maxAge = 0; //重新设置 cookie 的过期时间