我有以下代码在Express中创建会话 .
app.use(session({
secret: 'randomstring',
saveUninitialized: false,
resave: false,
cookie: {
secure: true,
maxAge: 60000 * 60 /* 1 hour */
}
}));
我主要使用它来存储Passport.js中的会话数据 . 目前,1小时后用户会自动退出 . 或者会话结束,用户退出 .
是否有一种简单的方法可以在会话中存储更多数据,并为不同的信息设置不同的到期日期?所以说我希望Passport.js( req.session.passport.user
)会话数据的有效期为1小时 . 我想要另一条数据说例如( req.session.myDataA
)到期为30天 . 我希望另一条数据( req.session.myDataB
)没有过期并永远保持活跃状态 .
在Express Sessions中有一种简单的方法可以实现这种行为吗?
2 回答
您可以使用cookie并在不同的cookie名称上设置不同的过期日期 . 因此,您可以拥有多个可以保存数据的Cookie,每个Cookie都会有一个特定的过期时间 .
话虽如此,我会说会话和cookie都不是你问题的正确解决方案 . 我会保持您的会话精简并将数据存储在数据库中 . 考虑到您正在使用会话,您可以使用Redis并将数据存储到期 . 您可以将Redis中的密钥分配给您的会话 . 例如:
在Redis中设置数据时,可以使用键
user_id:myDataA
并将其设置为过期 .虽然密钥仍在会话中,但您可以检查该值是否为
null
或是否具有您期望的数据 .我知道这可能听起来有点复杂,但即使作为会话的一个好习惯,你真的不希望存储大量数据,超出参考键,因为它变得非常难以管理 .
如果您使用的是MongoDB,还可以将文档设置为过期 . 但是,如果您不使用任何一种,Redis通常最容易设置并且是一个很好的会话存储 .
编辑:
如下所述,不是在不同的时间范围内使您无法使用的会话到期,而是在数据中设置一个具有到期时间的字段 . 然后,当您获得该数据时,检查它是否已过期(即1小时,30天等) .
您可以在另一个中间件中设置会话的maxAge
码: