node 第十八天 中间件express-session实现会话密钥

news2024/11/28 0:42:45
  1. express-session 文档
    express-session 一个简单的express会话中间件

  2. 使用场景
    在一个系统中, 需要维持一个临时的与登录态无关的会话密钥
    比如登录系统后, 请求某一个接口, 接口的行为与登录态无关, 也就是说任何人对接口的访问都是一样的,服务端不关心客户端是谁, 但是为了服务特定用户(比如能够登录该系统的用户),又必须有一个密钥来做验证,请求密钥时验证用户的登录状态,验证成功, 则发送密钥。 用户拿到密钥后就可以和服务端通信, 而通信过程不需要带上用户信息, 服务端也不会关心用户信息。

  3. 使用
    node

    const session = require('express-session');
    app.use(
      session({
        secret: 'myscret',
        resave: false,
        saveUninitialized: true,
        name: 'token'
      })
    );
    //服务端设置会话密钥,发送给客户端加密后的密钥
    //虽然接口叫做login其实和登录没有联系
    router.post('/login', (req, res, next) => {
      req.session.token = '10086';
      res.send(200, {
        msg: 'ok'
      });
    });
    //需要会话密钥验证的接口
    router.post('/request', (req, res, next) => {
      console.log(req.session);
      if (req.session.token && req.session.token === '10086') {
        res.send(200, {
          msg: 'get'
        });
        return;
      }
      res.send(200, {
        msg: 'error reject'
      });
    });
    //服务端销毁会话密钥
    router.post('/logout', (req, res, next) => {
      req.session.destroy(() => {
        res.send({
          msg: 'logout'
        });
      });
    });
    
  4. 其实这种场景比较少, 大多数的场景还是需要对用户的状态做出区分, 而且关联上用户状态也是可以涵盖这种场景的

  5. 使用注意, 如果前后端跨域 【注释一】 你需要注意, 跨域如何设置cookie(如果你读过文档, 你会知道这个中间件是基于cookie实现的)已经在node第十一天说过。
    在这里插入图片描述
    这是mdn的文档描述, 但是你无法在本地跨域的情况下使用使用这个中间件, 因为此中间件对于跨域设置cookie会忽略掉,即使是 locahost 。从规范的角度来说这里应该是这个中间件的不足之处

  6. 【注释一】 这里的跨域准确来说应该是至少域名/ip存在不同,而不能仅仅是端口号不同

  7. 这种会话模式显然是将凭证维护在服务端, 与之对应的还有另外一种方式, 也就是现在被广泛运用的token,把凭证维护在客户端。详见node 第十九天

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1216410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【java学习—十五】线程的通信(6)

文章目录 1. 线程通信1.1. wait() 方法:1.2. notify()/notifyAll() 方法 1. 线程通信 wait() 与 notify() 和 notifyAll(): ①wait():令当前线程挂起并放弃 CPU 、同步资源,使别的线程可访问并修改共享资源,而当前线程…

Vue3 生命周期

如下是Vue3的生命周期函数图: 一、Vue2生命周期和Vue3声明周期的区别 1. Vue2 中,只要创建Vue实例对象而不需要挂载就可以实现beforeCreate 和 created 生命周期函数。 Vue3中必须要将Vue实例对象挂载完成,所有的准备工作做完,…

视频号视频怎么保存?教你三种方法

现在随着视频号的兴起,很多用户都喜欢在视频号上分享自己的生活、工作和兴趣爱好。但是很多人都遇到了一个问题,就是视频号上看到了喜欢的视频,想要保存下来,却不知道怎么做。今天我们就来教大家三种方法,让你轻松保存…

Servlet---从创建项目到部署项目的整个流程

文章目录 创建项目引入Servlet依赖创建目录结构编写代码打包程序部署程序验证程序 创建项目 引入Servlet依赖 为什么需要引入依赖资源呢? Servlet不是标准库自带的,需要从外部引入进来才能使用。如何引入? 利用maven,maven的一个…

SystemVerilog学习 (9)——随机化

目录 一、概述 二、随机化 2.1、如何简单地产生一个随机数 2.1.1 利用系统函数产生随机数 2.1.2 urandom() 2.2、什么需要随机化 2.3、随机约束 2.3.1 rand 和 randc 2.3.2 随机约束的使用 2.3.3 约束块 三、总结 一、概述 随着设计变得越来越大,要产生一个完整的激…

【技巧】Windows 11 如何安装日文语言包和日文系统

Windows 11 如何安装日文语言包和日文系统 安装日语语言第一步:打开系统设置第二步:选择【时间和语言】选项第三步:点击【添加语言】按钮第四步:输入语言,并选择第五步:安装输入法/语言包第六步&#xff1a…

2022年12月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 数据文件“abc.txt”中包含若干个英文单词,如图所示: 读取文件“abc.txt”中数据的Python程序段…

springboot326校园体育场馆(设施)使用管理网站

交流学习: 更多项目: 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示: ————————————————

Milvus Standalone安装

使用Docker Compose安装 Milvus standalone(即单机版),进行一个快速milvus的体验。 前提条件: 1.系统可以使用centos 2.系统已经安装docker和docker-compose 3.milvus版本这里选择2.3.1 由于milvus依赖etcd和minio&#xff0c…

11.16堆的一些性质与操作

1016 7,5,4,3,2,6,1 7,4,6,1,3,2,5 没有度为1的结点说明为满树 A.哈夫曼树一定没有度为1的结点。最大堆可能有度为1的结点 D.哈夫曼…

【图像分类】【深度学习】【Pytorch版本】ResNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】 ResNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】 ResNet模型算法详解前言ResNet讲解Deep residual learning framework(深度残差学习框架)ResNet残差结构ResNet模型结构 ResNet Pytorch代码完整代码总结 前言 …

【OpenCV实现图像:OpenCV进行OCR字符分割】

文章目录 概要基本概念读入图像图像二值化小结 概要 在处理OCR(Optical Character Recognition,光学字符识别)时,利用传统的图像处理方法进行字符切分仍然是一种有效的途径。即便当前计算机视觉领域主导的是卷积神经网络&#xf…

AI中文版怎么用,版本分享,GPT官网入口

网页版上线啦,在线助力大学生、上班族的高效生活! GPT4.0是OpenAI最新推出的聊天模型,它的语言理解和生成能力比以前的版本更强大。对于忙碌的上班族来说,GPT4.0能帮助你高效处理工作中的大部分写作任务,比如撰写报告…

TS7031: Binding element ‘role‘ implicitly has an ‘any‘ type.

文章 前言错误场景问题分析解决方案后言 前言 ✨✨ 他们是天生勇敢的开发者,我们创造bug,传播bug,毫不留情地消灭bug,在这个过程中我们创造了很多bug以供娱乐。 前端bug这里是博主总结的一些前端的bug以及解决方案,感兴…

【C++】类和对象(5)--拷贝构造函数

目录 一 概念 二 拷贝构造函数特性 1. 重载形式 2. 参数原则 3 默认拷贝函数 三 拷贝构造函数的实现 一 概念 在创建对象时,可否创建一个与已存在对象一某一样的新对象呢? class Date { public:Date(int year 1900, int month 1, int day 1)/…

nestJs 高阶用法

真正的服务器需要做全局的数据核查、敏感操作落库和数据转化。 拥有这些能力才能让后台能力更加丰富,本篇将主要使用 NestJs 的高级能力,来实现这些功能。 使用 guards 和 decorators 实现数据校验核查通过 interceptors 和 decorators 实现敏感操作录…

Linux三剑客:grep的基本使用

目录 grep介绍 什么是grep和egrep 使用grep 命令格式 命令功能 命令参数 grep配合正则表达式使用 认识正则 基本正则表达式 匹配字符 配置次数 位置锚定:定位出现的位置 分组和后向引用 作为学习一名计算机专业的学生,我想Linux应该需要了解…

详细自动化测试介绍

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

【10套模拟】【5】

关键字: 数据的最小单位、归并排序(两两归并)、单链表顺序存取、邻接表表头顶点顺序存储随机访问、三角矩阵元素个数、堆的性质、冒泡排序、二叉树是否相同

我对需求分析的理解

一、背景 最近做了一个项目,也算是踩坑过程,产品上线了,用户不怎么买单,使用者聊聊无几,前期一直不清楚为什么会这样,诚然新系统的开发设计上采用了更新的技术,设计上采用了更好的理念&#xf…