代码之家  ›  专栏  ›  技术社区  ›  Joseph Norman

在express中从sid获取会话

  •  0
  • Joseph Norman  · 技术社区  · 6 年前

    我正在尝试设置多个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获取会话中存储的用户名?

    附笔。 为了避免混淆,这个问题不是要从http get/post请求中获取用户名。本质上,我是在询问会话存储在http服务器程序中的位置,这样我就可以通过只提供会话id来检索用户名。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Joseph Norman    6 年前

    我在express会话的github上问了同样的问题。我从道格·威尔逊那里得到的答案是:

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

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