8

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

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

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

如果我想在用户尝试登录并将 cookie 过期时间设置为无限期或一年时实现“记住我”功能,我应该如何正确使用 cookie?

我发现 cookieParser 只支持这样的东西:

express.cookieParser("secret")

并且不支持 expire/maxAge 设置。

4

3 回答 3

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().

于 2012-12-16T22:49:02.187 回答
6

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

if(remember){
    req.session.cookie.maxAge = 2628000000;
}
于 2013-09-11T12:00:54.350 回答
0

这是一个执行此操作的快速中间件:https ://github.com/mdarveau/session-rememberme

于 2015-02-18T03:45:35.230 回答