我目前正在使用
express-session
和 connect-mongodb-session
来存储会话和 cookie。
这是我的实现:
app.js
const store = new MongoDBStore({
uri: mongoURI,
collection: 'mySessions'
});
app.use(session({
secret: 'whatever',
store: store,
resave: false,
saveUninitialized: true,
cookie: {
maxAge: 30000 // only 30 secs to to help with testing
}
}))
app.use(express.urlencoded({ extended: true }))
app.use(async (req, res, next) => {
console.log('req.session', req.session)
try {
if (req.session && req.session.userId) {
const user = await User.findById(req.session.userId)
req.user = user
req.session.auth = true
res.locals.auth = req.session.auth
} else {
res.locals.auth = null
}
next()
} catch (error) {
console.log('auth middleware error', error)
}
})
现在我使用 30 秒的时间
maxAge
,这样我就可以测试应用程序的行为。
如果用户关闭浏览器并在 30 秒内返回,他们将保持登录状态。否则,cookie 不再有效,用户必须再次登录。 这样就可以了。
但是,如果用户正在浏览并在 30 秒后发出任何请求,则 Cookie 将不再处于活动状态。
我想做这样的: 如果用户正在使用该应用程序,但 30 秒 maxAge 已完成,会话和 cookie 会自动更新,并更新 maxAge,因此用户在使用该应用程序时无需再次登录。
但是,如果用户关闭浏览器并在 maxAge 之后返回,则需要重新登录(这已经发生了)。
谢谢你。
express session有一个名为rolling = true的选项,它将在每次服务器交互时重置你的maxAge。这可能就是您正在寻找的。不要使用expires,使用maxAge,无论如何这都是他们推荐的。