09_Session案例

简介: 09_Session案例

本节介绍一个登录案例,前后端通过输入验证码判断用户是不是机器人

  1. 安装expression-session

pnpm add express-session -S

pnpm add @types/express-session -D

  1. 安装验证码生成模块svgCaptcha

pnpm add svgCaptcha

  1. 在main.ts中使用express-session
app.use(session({
  // 一段随机字符串
    secret:'xiaoman',
  // 强制重新保存会话,即使在请求过程中它未被修改过
    rolling:false,
  // 设置cookie的名称
    name:'xiaoman.sid',
  // cookie相关选项
    cookie:{
      httpOnly:true,
      // 设置cookie的生存时间,以毫秒为单位
      maxAge:1000
    }
}))
  1. 创建验证码并返回给前端
// 必须使用这种导入方式,直接导入svgCaptcha将会变成undefined
import * as svgCaptcha from 'svg-captcha';
@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}
  @Get('code')
  verification(@Req() req, @Res() res) {
    const captcha = svgCaptcha.create({
      size: 4,//生成几个验证码
      fontSize: 50, //文字大小
      width: 100,  //宽度
      height: 34,  //高度
      background: '#cc9966',  //背景颜色
    })
    // 将验证码存储在前端的session对象中
    req.session.code = captcha.text
    // 设置响应类型,如果不写+xml的话客户端会提示下载文件,加了后就可以直接展示在页面上了
    res.type('image/svg+xml')
    // 这将把cookie也一起带出去
    res.send(captcha.data)
  }

关于req.session:

HTTP session提供了一个用于在不同请求间存储信息的方法,个人理解是将信息存储在客户端的请求头中,每次客户端输入验证码都会将输入的内容和请求头中的session进行比较,并且这里的session可以在多个请求间共享。

那为什么不在后端随便定义一个变量呢?

答:只有一个请求的时候当然OK,但请求多了你怎么办,全部存在服务器中浪费资源,而且还得动态分配,开销太大了。

目录
相关文章
|
消息中间件 弹性计算 Java
Rocketmq-spring入门与实践
本场景带您体验如何在 Spring 生态中优雅地使用 Apache RocketMQ,感受最受欢迎业务开发框架与最受欢迎消息平台结合的魅力。
|
算法 Unix
socket套接字选项getsockopt&setsockopt
setsockopt()函数用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项。getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。
256 0
|
11月前
|
存储 数据采集 大数据
数据仓库建模规范思考
本文介绍了数据仓库建模规范,包括模型分层、设计、数据类型、命名及接口开发等方面的详细规定。通过规范化分层逻辑、高内聚松耦合的设计、明确的命名规范和数据类型转换规则,提高数据仓库的可维护性、可扩展性和数据质量,为企业决策提供支持。
899 10
|
存储 人工智能 自然语言处理
人工智能与未来工作:机遇与挑战
【10月更文挑战第27天】 本文探讨了人工智能(AI)对未来工作的影响,重点分析了AI技术带来的机遇与挑战。通过具体案例和数据,展示了AI如何改变传统行业,创造新的就业机会,同时也提出了应对策略,帮助读者理解并准备迎接这一变革。
|
缓存 前端开发 JavaScript
|
机器学习/深度学习
多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比
多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比
|
安全 大数据 数据挖掘
大数据时代,数据安全管理的问题与对策
无论是从企业还是个人的需求出发,考取一个大数据管理相关的证书都是最好的选择,不仅能提升大数据管理能力、意识和素质,还能获得更高的市场信誉与认可。
|
存储 SQL 供应链
大学教材征订管理系统数据库设计
大学教材征订管理系统数据库设计
476 0
|
Unix Shell 数据处理
怎样使用Cython提升Python的性能
**Cython是Python的性能增强工具,用于提升Python代码的速度。它允许声明变量类型并调用C库。安装Cython使用`pip install Cython`。Cython语法接近Python,但通过类型声明优化性能。编译Cython代码需创建setup.py文件,然后运行`python setup.py build_ext --inplace`。通过Cython,可以直接优化Python代码和调用C函数,平衡速度与灵活性。**
411 2
|
存储 关系型数据库 MySQL
MySQL中的DISTINCT与GROUP BY:效率之争与实战应用
【8月更文挑战第12天】在数据库查询优化中,DISTINCT和GROUP BY常常被用来去重或聚合数据,但它们在实现方式和性能表现上却各有千秋。本文将深入探讨两者在MySQL中的效率差异,结合工作学习中的实际案例,为您呈现一场技术干货分享。
1261 0