2

我想使用 express.js 中的会话,我知道我们可以从 req.session.id 中获取会话 id,而且我也知道这个 id 总是不同的(每次我们访问路由时):

我看到有些人建议在全局中获取和保存会话,但问题是(除非我错了),如果我在用户以这种方式连接我的应用程序时保存会话:

app.get('/init', function(req, res) {                                                                                                                                    
        global.session = req.session;                                                                                                                                                                                                                                                        
    });

如果 User_1 连接我的应用程序,那么 User_2 连接我的应用程序并且 User_1 仍然存在,那么 global.session 将包含 User_2 会话的值,即使对于 User_1 也是如此,对吗?

如果我是对的,如何正确保存会话?我考虑了一个由 init 路由中的 req.session.id 索引的数组,但由于即使同一个用户访问相同的路由(这是正常的吗?),这总是不同的,所以不可能像这样处理。

您发现管理会话的最佳方式是什么?

谢谢 !

4

1 回答 1

1

不要将会话保存在全局变量中,因为这意味着该站点的每个后续访问者都将使用和修改相同的变量(您使用相同的 express 实例来处理所有进来的请求。)您可以使用 express 的内置中间件在开发应用程序时将会话存储在内存中。在开始声明路由之前,只需放置以下中间件:

app.use(express.cookieParser()); /* Parses cookies. */
app.use(express.cookieSession({ secret: 'yoursecret' })); /* Handles sessions stored in your cookies. */
// ... your other middleware

app.get('/', function(req, res) {
    if (req.session) {
        res.json(req.session);
    } else {
        res.send('You have no session.');
    }
});

对于生产,建议使用 Redis 之类的东西来存储会话。

于 2012-12-31T01:39:58.743 回答