第一页加载时有多个快速会话实例
Multiple express session instances on first page load
我自动给每个用户一个会话,并将会话数据存储在一个名为 sessions
的 MongoDB 集合中。我还设置了一个 cookie,它允许我识别每个(返回的)用户。当用户 returns 时,当 cookie 随请求一起发送时,我能够成功找到我的会话。
除用户第一次访问网站外一切正常。前端(使用 Angular 构建)同时对节点服务器进行六个不同的调用(每个调用都有自己的目的)。由于还没有设置 cookie,节点服务器认为有六个不同的用户调用服务器,由此创建六个会话并将其存储到会话集合中。
下一次调用(在用户操作之后)发生在倒数第二个创建的会话中,以后的每次调用都使用此会话 ID。
如何解决用户第一次访问网站时初始创建六个不同的session?
可以对 "initiate" 会话执行一次调用,并在响应后执行其余的调用。但如果还有其他选择,我真的很想听听。
我正在使用 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
请求存在问题。选项请求不会在 headers 中发送 cookie,这导致在节点服务器上创建新会话。
由于选项请求仅用于检查 cross-domains 的授权,它一定是带有 cors 的东西。我禁用了 cors 并在禁用 cors 的情况下启动了 Chrome。这解决了问题。
请注意:我只为(更简单的)本地开发实现了 cors。我不需要实时服务器上的cors。
这是突击队员(Mac只)打开Google 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
})
}));
使用快速会话和快速会话
我自动给每个用户一个会话,并将会话数据存储在一个名为 sessions
的 MongoDB 集合中。我还设置了一个 cookie,它允许我识别每个(返回的)用户。当用户 returns 时,当 cookie 随请求一起发送时,我能够成功找到我的会话。
除用户第一次访问网站外一切正常。前端(使用 Angular 构建)同时对节点服务器进行六个不同的调用(每个调用都有自己的目的)。由于还没有设置 cookie,节点服务器认为有六个不同的用户调用服务器,由此创建六个会话并将其存储到会话集合中。
下一次调用(在用户操作之后)发生在倒数第二个创建的会话中,以后的每次调用都使用此会话 ID。
如何解决用户第一次访问网站时初始创建六个不同的session?
可以对 "initiate" 会话执行一次调用,并在响应后执行其余的调用。但如果还有其他选择,我真的很想听听。
我正在使用 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
请求存在问题。选项请求不会在 headers 中发送 cookie,这导致在节点服务器上创建新会话。
由于选项请求仅用于检查 cross-domains 的授权,它一定是带有 cors 的东西。我禁用了 cors 并在禁用 cors 的情况下启动了 Chrome。这解决了问题。
请注意:我只为(更简单的)本地开发实现了 cors。我不需要实时服务器上的cors。
这是突击队员(Mac只)打开Google 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
})
}));
使用快速会话和快速会话