加载第一页时有多个express会话实例



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

除了用户第一次访问网站之外,一切都很好。前端(使用Angular构建)同时对Node服务器进行六个不同的调用(每个调用都有自己的用途)。由于还没有设置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'
    })
}));

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

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

由于选项请求只用于检查跨域的授权,所以它一定是cors的问题。我禁用了cors,并在禁用cors的情况下启动了Chrome。这解决了问题。

请注意:我实现cors只是为了(更容易)进行本地开发。我不需要实时服务器上的cors。

这是突击队(仅限Mac)打开谷歌Chrome:

open -a Google Chrome --args --disable-web-security
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
            })
        }));

使用快速会话和快速会话

最新更新