如何在Express / Node.js中动态设置会话cookie的expires / maxAge?

时间:2013-07-17 01:53:48

标签: node.js cookies express

我试图实现一个"记住我"我的登录表单的功能。大多数网站如何做到这一点?我假设大多数网站在选中复选框后动态更改会话Cookie的过期或最大年龄字段。

那么,如何根据是否选中了“记住我”复选框来更改cookie应该动态持续多长时间?

到目前为止,我有:

if (req.body.remember)
{
    var thirtyDays = 30*24*60*60*1000;
    req.session.cookie.expires = new Date(Date.now() + thirtyDays);
    req.session.cookie.maxAge = thirtyDays;
}
else
{
    req.session.cookie.expires = false;
    req.session.cookie.maxAge = false;
}

console.log(req.session.cookie.expires, req.session.cookie.maxAge)

这很有效。但我不能选择来纪念我;由于某种原因,cookie永远存在。即使我删除了cookie(在chrome中)并且在没有记住我的字段的情况下登录,它仍然会在我关闭浏览器会话时持续,即使它在网络检查员的cookies面板中说它是Session和console.log给了我'假,假'。

我显然做错了什么。我该怎么做?

提前致谢! :)

修改

实际上看起来上面的代码是有效的。它看起来好像不起作用的原因是因为我可以选择在重新启动Chrome时重新打开浏览器标签。这会导致Chrome永远不会删除浏览器会话Cookie,并让我认为将Cookie的到期时间设置为false并不能使它们成为浏览器会话Cookie。

1 个答案:

答案 0 :(得分:3)

根据HTTP cookie's Expires and Max-Age directives,Cookie的expires日期可以设置为纪元时间(或早于现在的日期),maxAge设置为0:

req.session.cookie.expires = new Date(0);
req.session.cookie.maxAge = 0;