6

我正在尝试为我的登录表单实现“记住我”功能。大多数网站如何做到这一点?我假设大多数站点在选中复选框时会动态更改会话 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)

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

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

提前致谢!:)

编辑

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

4

1 回答 1

4

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

req.session.cookie.expires = new Date(0);
req.session.cookie.maxAge = 0;
于 2013-07-17T05:00:01.340 回答