用express和backbone来正确管理会话

时间:2012-12-22 22:16:19

标签: node.js session backbone.js express

我想使用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索引的数组,但是因为即使同一个用户访问同一个路由(这是正常的吗?)总是不同的,所以不可能这样做。

您找到管理会话的最佳方式是什么?

谢谢!

1 个答案:

答案 0 :(得分: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这样的东西来存储你的会话。