Express-Session:如何保持会话活动?

问题描述 投票:0回答:1

我目前正在使用

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 之后返回,则需要重新登录(这已经发生了)。

谢谢你。

node.js session cookies
1个回答
0
投票

express session有一个名为rolling = true的选项,它将在每次服务器交互时重置你的maxAge。这可能就是您正在寻找的。不要使用expires,使用maxAge,无论如何这都是他们推荐的。

© www.soinside.com 2019 - 2024. All rights reserved.