我正在尝试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
答案 0 :(得分:2)
请参阅上面链接的StackOverflow问题的答案:
答案 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)