使用express和MongoDB的node.js中的会话生命周期

7

我正在使用express框架的node.js。作为会话存储,我正在使用MongoDB。我该如何设置在特定时间后从MongoDB中删除会话对象?以下是我的声明方式:

app.use(express.cookieParser());
    app.use(express.session({
                secret: "Stays my secret",
                store: new MongoStore({ db: 'myDB' })
                    }));
2个回答

7

您的问题有点模糊,但从我了解到的内容来看,您想设置会话的过期时间:

您可以使用 maxAge 来实现:

app.use(express.cookieParser());
app.use(express.session({
    secret  : "Stays my secret",
    maxAge  : new Date(Date.now() + 3600000), //1 Hour
    expires : new Date(Date.now() + 3600000), //1 Hour
    store   : new MongoStore({ db: 'myDB' })
}));

expires 值是新版本 express 必需的,而 maxAge 是旧版本所需的,不过你只需要使用 expires 即可。


4
计时器为maxAge每次会话使用时都会重置,还是从会话创建开始计算? 谢谢。 - Thomas
6
maxAge 应该是一个“年龄”(例如以毫秒为单位的值),而不是未来的“时间”。 - UpTheCreek
@UpTheCreek 我相信这个单位是秒而不是毫秒... 有人可以确认一下吗? - wprl
@RoberPitt,MongoStore有什么用途?会在会话超时后如何从数据库中删除?你能解释一下吗? - Nalla Srinivas

1

@RobertPitt编辑了您的答案。 Cookie(会话)对象如下:

{
 "cookie":"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},
 "your_var_1":"value 1",
 "your_var_2":"value 2",
 ...
}
< p> express.session的参数应该像文档中所示:

app.use(express.session({
    secret  : "Stays my secret",
    cookie: {
        maxAge  : new Date(Date.now() + 3600000), //1 Hour
        expires : new Date(Date.now() + 3600000), //1 Hour
    },
    store   : new MongoStore({ db: 'myDB' })
}));

此外还有这个:
maxAge  : new Date(Date.now() + 3600000), //1 Hour

这将导致每个cookie(包括会话)在服务器启动后一小时后自动过期


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接