javascript - 从 Express 中的 sid 获取会话
问题描述
我正在尝试设置多个 websocket 服务器来处理使用一个中央 http 服务器的用户。express 程序在登录期间通过将用户名存储在会话中来建立会话,并将用户重定向到带有 websocket 客户端的页面。然后,websocket 服务器尝试中断会话并在客户端连接时接收用户名。在测试过程中很明显,用户对象只存储在 http 服务器上(不在 cookie 中),实际上在 websocket 服务器上是不可接收的。这是http服务器代码:
var http = require('http');
var Express = require('express');
var bodyParser = require('body-parser');
var session = require('express-session');
var sessionParser = session({
secret: 'lalala',
cookie: {
maxAge: 3 * 60 * 60 * 1000
},
resave: true,
saveUninitialized: true
});
var app = Express();
app.use(sessionParser);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
var server = app.listen(args.port, function() {
console.log("HTTP server connected!");
});
现在我已经解释了整个问题,我的问题是:如何仅通过会话 ID 获取存储在会话中的用户名?
PS 为了避免混淆,这个问题不是关于从 http GET/POST 请求中获取用户名。本质上,我是在询问会话存储在 http 服务器程序的何处,以便我可以通过仅提供 session_id 来检索用户名。
解决方案
我在 express-session 的 github 上问了同样的问题。这是我从 Doug Wilson 那里得到的答案:
“因为您从未设置会话存储并将其传递给此模块,所以您使用的是用于基本开发并且仅在 http 服务器内存中的内存存储。您希望实际使用一个通过 sid 存储会话的存储一个数据库。
您可以使用的商店列表在自述文件中:https ://github.com/expressjs/session/blob/master/README.md#compatible-session-stores "
推荐阅读
- android - 二进制 XML 文件第 17 行:膨胀类 com.google.android.material.textfield.TextInputLayout 时出错
- c# - 如何使用参数从命令行运行 Xunit 测试
- r - 使用序号在 data.frame 列中继续数字系列
- python - Django 部署后的服务器错误 (500)
- windows - C/C++ / Windows 10:如何枚举像 diskpart 这样的卷?
- maven - 将 Maven 插件用于 Sonatype OSS 索引时出现“未绑定 org.sonatype.ossindex.maven.common.ComponentReportAssistant 的实现”错误
- javascript - 从服务器获取精确的 ping(毫秒)
- python - 根据条件获取最小日期和最大日期之间的时间差
- ios - 仅当用户访问我的应用程序中的特定网站时,我如何才能显示警报?
- bash - 在 git diff 中查找带有文件名和行号的 TODO