如何使用Express.js中的cookie实现“登录记住我”?

时间:2012-12-16 18:33:12

标签: node.js cookies express

我感到很困惑,不明白res.cookie和req.cookies有什么区别。更奇怪的是,我发现如果我没有设置cookie:

//The value will be:
req.cookies.uid=="undefined"
//instead of:
req.cookies.uid==undefined

为什么express.js会像这样设计cookie?

如果我想实施一个"请记住我"当用户尝试登录并将cookie过期时间设置为无限或可能一年时,我应该如何正常使用?

我发现cookieParser只支持这样的事情:

express.cookieParser("secret")

并且不支持expire / maxAge设置。

3 个答案:

答案 0 :(得分:15)

res.cookie实际上是一个签名为res.cookie(key, value, opts)的函数。您可以使用它来设置客户端的cookie值/选项。另一方面,req.cookies是一个对象,它为您提供客户端的当前cookie值。以下是使用Cookie跟踪网页浏览量的示例:

var counter = 0;
app.get('/counter', function(req, res) {
    res.cookie('counter', ++counter);

    if (!req.cookies.counter) {
        res.send('This is your first visit!');
    } else {
        res.send('This is visit number '+ req.cookies.counter +'!');
    }
});

如果您使用express.cookieSession()中间件,则可以设置应用程序范围的默认Cookie属性。例如,cookie的maxAge属性确定cookie将来到期的毫秒数,所以在这里我将它设置为在一小时后到期:

app.use(express.cookieParser());
app.use(express.cookieSession({ secret: 'secret', cookie: { maxAge: 60 * 60 * 1000 }});
// ... your middleware and routes

否则,您可以通过将选项对象传递给res.cookie()来单独设置cookie选项。

答案 1 :(得分:2)

我建议您参考以下question/answer。您正在寻找的是以下代码。它允许您设置每个cookie的最大年龄。

if(remember){
    req.session.cookie.maxAge = 2628000000;
}

答案 2 :(得分:0)

这是一个明确的中间件:https://github.com/mdarveau/session-rememberme