-
express-session 文档
express-session 一个简单的express会话中间件
-
使用场景
在一个系统中, 需要维持一个临时的与登录态无关的会话密钥比如登录系统后, 请求某一个接口, 接口的行为与登录态无关, 也就是说任何人对接口的访问都是一样的,服务端不关心客户端是谁, 但是为了服务特定用户(比如能够登录该系统的用户),又必须有一个密钥来做验证,请求密钥时验证用户的登录状态,验证成功, 则发送密钥。 用户拿到密钥后就可以和服务端通信, 而通信过程不需要带上用户信息, 服务端也不会关心用户信息。
-
使用
nodejsconst 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' }); }); }); -
其实这种场景比较少, 大多数的场景还是需要对用户的状态做出区分, 而且关联上用户状态也是可以涵盖这种场景的
-
使用注意, 如果前后端跨域 【注释一】 你需要注意, 跨域如何设置cookie(如果你读过文档, 你会知道这个中间件是基于cookie实现的)已经在node第十一天说过。

这是mdn的文档描述, 但是你无法在本地跨域的情况下使用使用这个中间件, 因为此中间件对于跨域设置cookie会忽略掉,即使是 locahost 。从规范的角度来说这里应该是这个中间件的不足之处
-
【注释一】 这里的跨域准确来说应该是至少域名/ip存在不同 ,而不能仅仅是端口号不同
-
这种会话模式显然是将凭证维护在服务端, 与之对应的还有另外一种方式, 也就是现在被广泛运用的token,把凭证维护在客户端。详见node 第十九天
node 第十八天 中间件express-session实现会话密钥
飞衡、如日之升2023-11-18 18:01
相关推荐
防火墙在线7 小时前
前后端通信加解密(Web Crypto API )水冗水孚12 小时前
效能工具(九)之编写nodejs脚本使用get-video-duration批量读取视频时长,并生成sql语句修复数据库表字段值huangql52013 小时前
Vite与Webpack完全指南:从零开始理解前端构建工具api_1800790546013 小时前
【技术教程】Python/Node.js 调用拼多多商品详情 API 示例详解gongzemin17 小时前
使用阿里云 ECS 安装 MongoDB并实现后端连接用户479492835691517 小时前
你知道node背后的libuv是什么吗pixle021 小时前
从零学习Node.js框架Koa 【一】 Koa 初探从环境搭建到第一个应用程序Moment1 天前
为什么我们从 Python 迁移到 Node.js凤凰战士芭比Q1 天前
web中间件——Nginx冴羽1 天前
为什么在 JavaScript 中 NaN !== NaN?背后藏着 40 年的技术故事