Javascript 快速会话不同过期时间
我有以下代码在Express中创建会话Javascript 快速会话不同过期时间,javascript,node.js,session,express,cookies,Javascript,Node.js,Session,Express,Cookies,我有以下代码在Express中创建会话 app.use(session({ secret: 'randomstring', saveUninitialized: false, resave: false, cookie: { secure: true, maxAge: 60000 * 60 /* 1 hour */ } })); 我主要使用它在Passport.js中存储会话数据。当前用户在1小时后自动注销。或者会话结束,
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会话中实现此行为?您可以使用cookie并在不同的cookie名称上设置不同的过期时间。因此,您可以有多个cookie来保存数据,并且每个cookie都有一个特定的过期时间 话虽如此,我想说会话和cookie都不是解决问题的正确方法。我会让你的会话保持精简,并将数据存储在数据库中。考虑到您正在使用会话,您可以使用Redis并存储过期的数据。您可以将Redis中的密钥分配给会话。例如:
req.session.myDataA = 'user_id:myDataA'
req.session.myDataB = 'user_id:myDataB'
在Redis中设置数据时,可以使用键user\u id:myDataA
并将其设置为过期
// Will expire in 1 hour
SET user_id:myDataA "your data"
EXPIRE user_id:myDataA 3600
当密钥仍在会话中时,您可以检查该值是否为null
,或者是否具有所需的数据
我知道这听起来可能有点复杂,但即使是会话的良好实践,您也不希望存储大量数据,超出引用键,因为它变得非常难以管理
如果您使用的是MongoDB,还可以将文档设置为过期。但是,如果您不使用任何一种,Redis通常是最容易设置的,并且是一个很好的会话存储
编辑:
正如下面所评论的,与其让会话在不同的时间框架内过期,不如在数据中设置一个带有过期时间的字段。然后,当您获得该数据时,检查它是否已过期(即1小时、30天等)。您可以在另一个中间件中设置会话的最大值 代码:
我的意思是现在我只在会话中存储用户id。但Passport.js可以处理大部分问题。我认为这个答案比我想要的要复杂一些。如果可能的话,我希望与我现有的Passport.js实现集成,并尽可能保持高水平。最简单的解决方案可能是在数据中设置一个带有过期时间的字段,而不是在不同的时间范围内使会话过期。然后,当您获得该数据时,检查它是否已过期(例如,1小时、30天等)。如果我想在会话中存储用户和我的数据,那么这将无法工作。我想在会话中存储多个内容,每个内容都有不同的过期时间。请原谅,您是指会话中具有不同过期时间的“内容”吗?会话过期时是否应该过期?是。因此,我在课程中有很多内容。每个都有不同的过期时间。会话本身我希望永远不会过期。只是里面的东西有不同的过期时间。它正在工作。它可以为不同的会话设置不同的过期时间。在我的例子中,我使用一个Redis数据库来存储会话数据,这段代码运行得很好。有没有理由不使用?@GabrielBleu Local Storage在存储会话类型数据方面存在缺陷。Cookie随每个请求一起发送到特定域。本地存储没有。
// 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()
})