ExpressJS会话cookie未更新

时间:2014-02-08 10:46:17

标签: node.js session cookies express

我正在尝试express.session()中间件。用法似乎相当简单,我很快实现了我想要的。基本上我实现了基于会话cookie的身份验证。作为此功能的一部分,我实现了复选框"remember me",它几​​乎是网络登录窗口的标准。这似乎是一个问题。

我想要以下功能 - 当用户打开/重新加载页面时,如果有有效的会话cookie并且它与服务器应用程序上的现有会话对象匹配,那么服务器上的session.cookie.maxAge和客户端上的cookie到期将重置为新的值(now() + x)。因此,使页面工作 - 如果用户没有回来,例如3天后他会自动退出,但如果他在3天内回来,那么他就会登录并自动注销计数器重置为3天。

我预计session.touch()会这样做,但它似乎只会重置服务器上的会话过期日期,并且不会将新cookie推送到客户端。

我的问题 - 我是否遗漏了某些内容,或者是故意实施?

PS:我每次都可以重新生成会话,这会更新cookie。但我担心在每个请求上运行此代码的开销我也可以手动推送更新的cookie,但我更愿意在express.session()功能中执行此操作。

我也发现这个问题从未得到解答(OP自己除外): Updating cookie session in express not registering with browser

3 个答案:

答案 0 :(得分:2)

请参阅上面链接的StackOverflow问题的答案:

https://stackoverflow.com/a/27609328/4258620

答案 1 :(得分:1)

“cookie.maxAge”由connect.session touch()自动更新,但仅限于服务器端。

客户端更新maxAge必须使用res.cookie手动完成。

例如:

res.cookie(
    'connect.sid', 
    req.cookies["connect.sid"], 
    {
        maxAge: req.session.cookie.maxAge,
        path: '/', 
        httpOnly: true
    }
);

答案 2 :(得分:1)

现在,Express-session应该在浏览器in code中更新cookie 配置中的rolling: true提供您所需的功能。它会自动执行每个请求的触摸。 Docs