跳至主要內容

会话

刘春龙原创...大约 2 分钟NodejsNestjs教程文档

Cookies

HTTP cookie 是用户浏览器存储的一小段数据。 Cookie 旨在成为网站记住状态信息的可靠机制。 当用户再次访问该网站时,cookie 会自动随请求一起发送。

首先安装 所需包(及其类型,供 TypeScript 用户使用)

npm i cookie-parser
npm i -D @types/cookie-parser

安装完成后,将 cookie-parser 中间件应用为全局中间件(例如,在你的 main.ts 文件中)

import * as cookieParser from 'cookie-parser';
app.use(cookieParser());

你现在可以从路由处理程序中读取或设置(返回) cookie,如下所示

import { Controller, Get, HttpCode, HttpStatus, Post, Req, Res } from '@nestjs/common';
import { UserService } from './user.service';
import { Request, Response } from 'express';
@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) { }

  @Get("/one")  // 获取cookie
  findOne(@Req() req: Request) {
    console.log(req.cookies);
    return {
      msg: 1
    }
  }

  @Get("/two")  // 设置返回cookie
  findTwo(@Res() res: Response) {
    res.cookie('name', 'lcllcl', { maxAge: 1000 * 60 * 24 })
    res.send({ name: "lcl" })
  }
}

Session

HTTP 会话 提供了一种跨多个请求存储用户信息的方法,这对 MVC 应用特别有用。

首先安装 所需包(及其类型,供 TypeScript 用户使用)

npm i express-session
npm i -D @types/express-session

安装完成后,将 express-session 中间件应用为全局中间件(例如,在你的 main.ts 文件中)

import * as session from 'express-session';
app.use(
    session({
      secret: 'my-secret',
      resave: false,
      saveUninitialized: false,
      cookie: { maxAge: 1000 * 60 }  // 60秒有效期
    }),
);

secret 用于签署会话 ID cookie。 这可以是单个秘密的字符串,也可以是多个秘密的数组。 如果提供了一组秘密,则只有第一个元素将用于签署会话 ID cookie,而在验证请求中的签名时将考虑所有元素。 秘密本身应该不容易被人类解析,最好是一组随机字符。

启用 resave 选项会强制将会话保存回会话存储,即使会话在请求期间从未被修改。 默认值为 true,但不推荐使用默认值,因为默认值将来会更改。

同样,启用 saveUninitialized 选项会强制将 "uninitialized" 的会话保存到存储中。 当会话是新的但未修改时,它是未初始化的。 选择 false 对于实现登录会话、减少服务器存储使用或遵守在设置 cookie 之前需要许可的法律很有用。 选择 false 还有助于解决客户端在没有会话的情况下发送多个并行请求的竞争条件 (source)。

你现在可以从路由处理程序中读取或设置(返回) session,如下所示

import { Controller, Get, HttpCode, HttpStatus, Post, Req, Res } from '@nestjs/common';
import { UserService } from './user.service';
import { Request, Response } from 'express';
@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) { }

  @Get("/one")  // 获取session
  findOne(@Req() req: any) {
    console.log(req.session)
    return {
      msg: 1
    }
  }

  @Get("/two")  // 设置session
  findTwo(@Req() req: any) {
    req.session.code = Math.random()
    return {
      msg: 2
    }
  }
}
上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7