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

我自动给每个用户一个会话,并将会话数据存储在一个名为sessions的MongoDB集合中。 我也设置一个cookie,使我可以识别每个(返回)用户。 当用户返回时,当cookie与请求一起发送时,我能够成功find我的会话。

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

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

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

可以执行一个呼叫来“启动”会话,并在响应之后执行其余部分。 但如果有另一种select,我真的很想听到它。

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

这是我如何创build我的会议并设置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,从而导致在节点服务器上创build新的会话。

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

请注意 :我只是为了(更容易)本地开发而实施cors。 在现场服务器上我不需要cors。

这是用于打开Goog​​le Chrome的突击队( 仅限Mac ):

 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 }) })); 

使用快速会话和快速会话