我自动为每个用户提供一个 session ,并将 session 数据存储在名为 sessions
的 MongoDB 集合中。我还设置了一个 cookie,它允许我识别每个(返回)用户。当用户返回时,当 cookie 与请求一起发送时,我能够成功找到我的 session 。
除了用户第一次访问该网站之外,一切正常。前端(使用 Angular 构建)同时向 Node 服务器发出六个不同的调用(每个调用都有其自己的目的)。由于还没有设置cookie, Node 服务器认为有六个不同的用户调用服务器,从而创建了六个 session 并将其存储到 session 集合中。
下一次调用(在用户操作之后)发生在倒数第二个创建的 session 中,并且以后的每个调用都使用此 session ID 进行。
如何解决用户第一次访问网站时初始创建六个不同 session 的问题?
可以执行一次调用来“启动” session 并在响应后执行其余部分。但如果还有其他选择,我真的很想听听。
我使用的是 Express.js 4.0、Node.js v0.10.32 和 MongoDB v2.6.5 的自定义版本。
这就是我创建 session 并设置 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
请求存在问题。选项请求不会在 header 中发送 cookie,这会导致在 Node 服务器上创建新 session 。
由于options requests只是用于检查跨域授权,所以肯定是有cors的东西。我禁用了 cors,并在禁用 cors 的情况下启动了 Chrome。这解决了问题。
请注意:我实现 cors 只是为了(更容易)本地开发。我不需要在实时服务器上使用 cors。
这是打开 Google Chrome 的突击队员(仅限 Mac):
open -a Google\ Chrome --args --disable-web-security
关于node.js - 第一页加载时有多个快速 session 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28694961/