首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特快会话不同终止时间

特快会话不同终止时间
EN

Stack Overflow用户
提问于 2017-10-22 20:30:31
回答 2查看 2K关注 0票数 3

我有以下代码在Express中创建会话。

代码语言:javascript
复制
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会话中是否有实现此行为的简单方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-27 22:55:28

您可以使用cookie,并在不同的cookie名称上设置不同的到期时间。因此,您可以拥有多个保存数据的cookie,并且每个cookie都有特定的过期时间。

尽管如此,我要说的是,无论是会话还是cookie,都不是解决问题的正确方法。我会让你的会议精益求精,并将数据存储在数据库中。考虑到您使用的会话,您可以使用Redis和存储数据的呼气。您可以将Redis中的密钥分配给您的会话。例如:

代码语言:javascript
复制
req.session.myDataA = 'user_id:myDataA'
req.session.myDataB = 'user_id:myDataB'

使用Redis设置数据时,可以使用键user_id:myDataA并将其设置为过期。

代码语言:javascript
复制
// Will expire in 1 hour
SET user_id:myDataA "your data"
EXPIRE user_id:myDataA 3600

虽然键仍在会话中,但您可以检查该值是否为null,或者是否具有您所期望的数据。

我知道这听起来可能有点复杂,但即使作为会话的良好实践,您也不想存储大量数据,而不是引用键,因为管理起来非常困难。

如果使用的是MongoDB,也可以将文档设置为过期。但是,如果您没有使用任何一个,Redis通常都是最容易设置的,并且是一个很好的会话存储。

编辑:

正如下面所评论的,与其在不同的时间范围内终止会话,不如在数据中设置一个带过期时间的字段。然后,当您获得该数据时,检查它是否已过期(例如,1小时、30天等)。

票数 3
EN

Stack Overflow用户

发布于 2017-10-29 18:45:23

您可以在另一个中间件中设置会话的maxAge。

代码:

代码语言:javascript
复制
// 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()
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46878869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档