当前位置: 首页 > news >正文

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

  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.lryc.cn/news/232339.html

相关文章:

  • 【机器学习基础】机器学习入门(1)
  • 赶快来!程序员接单必须知道的六大注意事项!!!
  • 【C++】日期类实现,与日期计算相关OJ题
  • 前端404页面的制作
  • 深兰科技轮腿家用AI机器人荣获“2023年度城市更新科创大奖”
  • 669.修剪二叉树
  • 论文绘图-机器学习100张模型图
  • PHP项目学习笔记-萤火商城-增加一个模块(表涉及到的操作和文件)
  • 如何用Java设计自动售货机?
  • JAVA数据代码示例
  • github常用搜索指令
  • 为什么esp8266刷入了固件,无法接受AT指令
  • Scala---字符串、集合
  • Power Automate-当收到HTTP请求时触发流程
  • 学习c#的第十四天
  • 6.jvm中对象创建流程与内存分配
  • 算法--搜索与图
  • ROS 文件系统
  • 车载通信与DDS标准解读系列(1):DDS-RPC
  • 通过构造树形结构介绍map的用法
  • 代码随想录算法训练营Day 53 || 1143.最长公共子序列、1035.不相交的线、53. 最大子序和
  • Oracle JDBC数据库驱动程序介绍
  • scipy实现单因素方差分析
  • 深度学习实战59-NLP最核心的模型:transformer的搭建与训练过程详解,手把手搭建与跑通
  • 一阶滤波器(一阶巴特沃斯滤波器)
  • .net core中前端vue HTML5 History 刷新页面404问题
  • 【152.乘积最大子数组】
  • 如何开发OA系统场景的系统架构
  • spring boot 集成 RedisSearch 和 RedisJSON
  • 【Kotlin精简】第8章 协程