Yit*_*hou 5 cookies node.js express
我觉得很困惑,不明白res.cookie和req.cookies有什么区别.更奇怪的是,我发现如果我没有设置cookie:
//The value will be:
req.cookies.uid=="undefined"
//instead of:
req.cookies.uid==undefined
Run Code Online (Sandbox Code Playgroud)
为什么express.js会像这样设计cookie?
如果我想在用户尝试登录并将cookie过期时间设置为无限或可能一年时实现"记住我"功能,我该如何正确使用cookie?
我发现cookieParser只支持这样的事情:
express.cookieParser("secret")
Run Code Online (Sandbox Code Playgroud)
并且不支持expire/maxAge设置.
the*_*ham 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 +'!');
}
});
Run Code Online (Sandbox Code Playgroud)
如果使用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
Run Code Online (Sandbox Code Playgroud)
否则,您可以通过将选项对象传递给单独设置cookie选项res.cookie().
我建议您参考以下问题/答案。你要找的是下面的代码。它允许您设置每个 cookie 的最大年龄。
if(remember){
req.session.cookie.maxAge = 2628000000;
}
Run Code Online (Sandbox Code Playgroud)