如何在Express.js中使用cookie实现“login记住我”?

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

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

为什么express.js像这样devisecookie?

如果我想实现一个“记住我”function,而用户试图login和设置cookie过期时间无限或可能一年,我应该如何正确使用cookie?

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

 express.cookieParser("secret") 

并且不支持过期/最大年龄设置。

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属性决定了将来有多less毫秒的cookie将会过期,所以我在这里将其设置为在一小时后过期:

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

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

我build议你参考下面的问题/答案 。 你要找的是下面的代码。 它允许你设置每个cookie的最大年龄。

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

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