覆盖/更新浏览器 cookie

Ale*_*lls 4 browser cookies node.js express web

我有一个 Express 4.x 应用程序,我将一个 cookie 传递给浏览器

res.cookie('foo','bar1', {maxAge:99999999999});
Run Code Online (Sandbox Code Playgroud)

它在遥远的将来到期。但是,5 分钟后,我收到来自同一用户的另一个请求,我想给他们一个新的 cookie。

 res.cookie('foo','bar2', {maxAge:99999999999});
Run Code Online (Sandbox Code Playgroud)

从我的调试来看,看起来新 cookie 不会覆盖旧 cookie?是这样吗?如何用新的 cookie 更新/覆盖旧的 cookie?

Ale*_*lls 5

我大约 99% 肯定使用该{overwrite: true}属性可以解决问题 - 从这里开始:

https://www.npmjs.com/package/cookies

它说:

cookies.set( name, [ value ], [ options ] ) 这会在响应中设置给定的 cookie 并返回当前上下文以允许链接。

如果省略该值,则使用带有过期日期的出站标头来删除 cookie。

如果提供了 options 对象,它将用于生成出站 cookie 标头,如下所示:

maxAge:一个数字,表示从 Date.now() 到到期的毫秒数 expires:一个 Date 对象,指示 cookie 的到期日期(默认在会话结束时到期)。... overwrite:一个布尔值,指示是否覆盖先前设置的同名 cookie(默认情况下为 false)。如果这是真的,则在设置此 cookie 时,在同一请求期间设置的所有具有相同名称(无论路径或域)的 cookie 都会从 Set-Cookie 标头中过滤掉。

用 Node.js Express 的话说就是:

res.cookie('cdt_app_token', encoded, {maxAge: 90000000, httpOnly: true, secure: false, overwrite: true});
Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用的是非 SSL 或非 TLS 连接,则如果 secure 为 true,cookie 可能不起作用。

  • 我认为OP谈论了https://expressjs.com/en/api.html#res.cookie,你参考了https://www.npmjs.com/package/cookies。查看 Express 文档,没有“覆盖”属性,似乎是您引用的库所独有的。 (2认同)