Express 模块 cookie-session 不包括 SameSite 和 Secure in Response Set-Cookie

Express module cookie-session not including SameSite and Secure in Response Set-Cookie

之前在这里看到过这个,但我没有看到真正的解决方案。服务器的 Node Express express-session 模块或 cookie-session 模块发回一个 Session Cookie,但由于我没有在 SameSite/Secure 属性中编码,它们不存在并且做客户端在随后的 POST 中,服务器因未登录而失败,并显示 403。正如预期的那样。

首先,我的客户端登录服务器成功:

这里是对应的服务器代码,使用express-session:

通过 Set-Cookie 生成了 Session Cookie。注意 SameSite='none' 和 Secure=true 属性未包括在内,正如预期的那样,不存在。

现在,我已将 sameSite 和安全属性添加到 session object 和 运行 再次登录。

让我们看一下从该登录 Header 编辑的 return 响应,以及添加到 session object 的属性。我们不仅看不到 Set-Cookie 响应 Header 上的属性,而且没有 cookie returned!

看来,当这两个属性被添加到 session object 中的 express-session 或 cookie-session 时,结果是没有 cookie 是 return编辑。意思是后续 POST 到服务器将 return 403,用户未登录。

我真的很难过。我在这上面花了很多时间!感谢您的想法和帮助。

您似乎在滥用 cookie-session 中间件。 cookieSession function 采用 JavaScript 对象,但文档未提及该对象中的任何 cookie 字段。

cookie 字段中指定的任何内容都会被中间件忽略,并且对生成的 cookie 没有影响;您的 cookie 最终被标记为 HttpOnly 的唯一原因是 it's the middleware's default behaviour.

相反,所有 cookie 属性都应在“平面”对象中指定,如下所示:

app.use(cookieSession({
  name: 'session',
  secret: secret,
  domain: 'chicagomegashop.com',
  sameSite: 'none',
  secure: true,
  httpOnly: true
}));

但是,您还有另一个问题。如果我正确地解释了您的屏幕截图,您似乎试图在 https://paylivepmt.com 的响应中设置一个 Domain 属性为 chicagomegashop.com 的 cookie。那行不通; browsers will ignore such a Set-Cookie response header:

The user agent will reject cookies unless the Domain attribute specifies a scope for the cookie that would include the origin server.