首页加载时有多个快速会话实例

时间:2015-02-24 11:45:19

标签: node.js session express

我自动为每个用户提供会话并将会话数据存储在名为sessions的MongoDB集合中。我还设置了一个cookie,允许我识别每个(返回)用户。当用户返回时,我成功地能够在随请求发送cookie时找到我的会话。

一切正常,期待用户第一次访问该网站。前端(使用Angular构建)可以同时向节点服务器发出六个不同的呼叫(每个呼叫都有自己的用途)。由于尚未设置cookie,节点服务器认为有六个不同的用户呼叫服务器,通过该服务器创建六个会话并将其存储到会话集合中。

下一次调用(在用户操作之后)发生在倒数第二个创建的会话中,并且每个将来的调用都是使用此会话ID进行的。

当用户第一次访问网站时,如何解决六个不同会话的初始创建?

可以执行一次调用"启动"会话并在响应后执行其余的操作。但如果还有其他选择,我真的很想听听。

我正在使用Express.js 4.0的自定义版本,Node.js v0.10.32& MongoDB v2.6.5。

这是我创建会话并设置cookie的方式:

app.use(session({
    saveUninitialized: true,
    resave: true,
    cookie: { secure: false, httpOnly: false },
    name: 'someName',
    secret: 'someScret',
    store: new mongoStore({
        db: framework.mongoose.connection.db,
        collection: 'sessions'
    })
}));

如果您需要更多信息,请告诉我们。

2 个答案:

答案 0 :(得分:2)

我自己想通了。 OPTIONS次请求存在问题。选项请求不会在其标头中发送cookie,导致在节点服务器上创建新会话。

由于选项请求仅用于检查跨域的授权,因此它必须与cors有关。我禁用了cors并启动了Chrome,禁用了cors。这解决了这个问题。

请注意:我只为(更容易)本地开发实施了角色。我不需要在实时服务器上使用cors。

这是打开谷歌浏览器的突击队员( Mac only ):

open -a Google\ Chrome --args --disable-web-security

答案 1 :(得分:0)

var session = require('express-session');
    app.use(session({
            secret: 'a4f8071f-c873-4447-8ee2',
            cookie: { maxAge: 2628000000 },
            store: new (require('express-sessions'))({
                storage: 'mongodb',
                instance: mongoose, // optional
                //host: 'localhost', // optional
                //port: 27017, // optional
                //db: 'test', // optional
                collection: 'sessions', // optional
                expire: 86400 // optional
            })
        }));

使用快速会话和快速会话