expression不同的到期
我有以下代码在Express中创build会话。
app.use(session({ secret: 'randomstring', saveUninitialized: false, resave: false, cookie: { secure: true, maxAge: 60000 * 60 /* 1 hour */ } }));
我主要使用这个将会话数据存储在Passport.js中。 目前1小时后,用户会自动注销。 或者会话结束,用户注销。
有没有简单的方法在会话中存储更多的数据,并有不同的信息到期date? 所以说我想Passport.js( req.session.passport.user
)会话数据有一个1小时到期。 我想要另一个数据片段(例如req.session.myDataA
)的有效期为30天。 而我希望另一块数据( req.session.myDataB
)没有到期并永远保持活动状态。
在Express Sessions中是否有一种简单的方法来实现这种行为?
您可以使用Cookie并在不同的Cookie名称上设置不同的过期时间。 所以你可以有多个cookie来保存数据,每个都会有一个特定的过期。
话虽如此,我会说,这两个会议和cookies不会是你的问题的正确解决scheme。 我会保持您的会话精简并将数据存储在数据库中。 考虑到您正在使用会话,您可以使用Redis并存储过期的数据。 您可以将Redis中的密钥分配给您的会话。 例如:
req.session.myDataA = 'user_id:myDataA' req.session.myDataB = 'user_id:myDataB'
在Redis中设置数据时,可以使用密钥user_id:myDataA
并将其设置为过期。
// Will expire in 1 hour SET user_id:myDataA "your data" EXPIRE user_id:myDataA 3600
虽然密钥仍然处于会话中,但您可以检查该值是否为null
或具有您期望的数据。
我知道这可能听起来有点复杂,但即使是会议的一个好习惯,你也不希望存储大量的数据,超出了参考的关键点,因为它变得很难pipe理。
如果你正在使用MongoDB,你也可以设置文件到期。 但是,如果你不使用,Redis通常会是最容易设置的,并且是一个很好的会话存储。
编辑:
如下所述,不是在不同的时间段内将会话过期,而是仅仅在数据中设置一个字段到期时间。 那么当你得到这些数据时,检查是否已经过期(即1小时,30天等)。
你可以在另一个中间件中设置session的maxAge
码:
// after session and passport middleware app.use(function(req, res, next) { if (req.session.user) { // some condition req.session.cookie.maxAge = 1000 * 60 * 60 * 24 // 24 hours } else if (req.session.myData) { req.session.cookie.maxAge = 1000 * 60 * 60 } // another condition // save the session req.session.save() // add next at the end of middleware // so it can pas data edited to another middleware next() })