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

Sam*_*Sam 5 cookies node.js express

我正在尝试为我的登录表单实现"记住我"功能.大多数网站如何做到这一点?我假设大多数网站在选中复选框时动态更改会话cookie的expires或max-age字段.

那么,如何根据是否选中"记住我"复选框,更改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)
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢!:)

编辑

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

yux*_*ang 5

根据HTTP cookie 的 Expires 和 Max-Age 指令,可以将 cookie 的expires日期设置为纪元时间(或早于现在的日期),并将 maxAge 设置为 0:

req.session.cookie.expires = new Date(0);
req.session.cookie.maxAge = 0;
Run Code Online (Sandbox Code Playgroud)