首页 > 解决方案 > 从 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 来检索用户名。

标签: javascriptnode.jsexpress

解决方案


我在 express-session 的 github 上问了同样的问题。这是我从 Doug Wilson 那里得到的答案:

“因为您从未设置会话存储并将其传递给此模块,所以您使用的是用于基本开发并且仅在 http 服务器内存中的内存存储。您希望实际使用一个通过 sid 存储会话的存储一个数据库。

您可以使用的商店列表在自述文件中:https ://github.com/expressjs/session/blob/master/README.md#compatible-session-stores "


推荐阅读