【问题标题】:How do I dynamically set the session cookie's expires/maxAge in Express/Node.js?如何在 Express/Node.js 中动态设置会话 cookie 的 expires/maxAge?
【发布时间】:2013-07-15 10:02:57
【问题描述】:

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

【问题讨论】:

    标签: node.js cookies express


    【解决方案1】:

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

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

    【讨论】:

    • 而不是将它们设置为false?
    • 是的,cookie 的 expires 应该是一个日期,而 maxAge 应该是一个数字。
    • 原来这会使 cookie 立即过期。那不是我想要的。我希望 cookie 在浏览器会话结束后立即过期。为了做到这一点,我应该将这些字段设置为什么?
    • 我明白了你的想法。你可以试试delete req.session.cookie.expiresdelete req.session.cookie.maxAge 吗?当expiresmaxAge 均未设置时,浏览器应该能够获取session-only 配置。我没有测试它的环境。所以不确定 express/connect 是否太聪明了。
    • 看起来设置为 false 确实有效。我刚刚在 Chrome 中进行了一项设置,阻止我在退出后重新启动浏览器会话。
    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 2018-05-31
    • 2012-03-31
    • 2021-05-05
    • 2013-03-08
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多