每次关闭所有浏览器窗口然后再次打开Web应用程序时,都会建立一个新会话,这意味着我必须再次进行身份验证。
供您参考,我使用express@4.14.0
作为Web应用程序框架,express-session@1.14.1
+ connect-mongo@1.3.2
作为中间件来存储会话,使用passport@0.3.2
进行身份验证。
以下是cookie和会话配置的代码:
// CookieParser should be above session
app.use(cookieParser());
// Express MongoDB session storage
app.use(session({
resave: true,
saveUninitialized: true,
name: config.sessionName,
secret: config.sessionSecret,
store: new MongoStore({
mongooseConnection: db.connection,
collection: config.sessionCollection
})
}));
" old"存储在MongoDB中的会话仍有两周的时间到期。
似乎Node.js应用程序无法识别" old"来自浏览器的会话,因此创建一个" new"一,告诉浏览器使用" new"之一。
它偶尔不会发生,但总是如此,所以我认为我的网络应用程序出了问题。
答案 0 :(得分:0)
感谢@Bradley,最后我发现了什么是错误的。
这是我的解决方案
app.use(session({
cookie: {
maxAge: ms('14 days') // `ms` is a node module to convert string into milliseconds
},
resave: true,
saveUninitialized: true,
name: config.sessionName,
secret: config.sessionSecret,
store: new MongoStore({
mongooseConnection: db.connection,
collection: config.sessionCollection
})
}));
有关详细信息,请参阅https://github.com/expressjs/session#expires
默认情况下,没有设置过期,大多数客户端会认为这是一个非持久性cookie"并将在退出Web浏览器应用程序的条件下删除它。
这就是我遇到这个问题的原因。