0

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

首先,我的客户端成功登录服务器: 在此处输入图像描述

下面是相应的服务器代码,使用 express-session: 在此处输入图像描述

在此处输入图像描述

它通过 Set-Cookie 生成了一个 Session Cookie。注意 SameSite='none' 和 Secure=true 属性不包括在内,并且正如预期的那样,不存在。 在此处输入图像描述

在此处输入图像描述

现在,我已将 sameSite 和 secure 属性添加到会话对象并再次运行登录。

在此处输入图像描述

让我们看看从这个登录返回的响应标头,以及添加到会话对象的属性。我们不仅看不到 Set-Cookie Response Header 上的属性,而且没有返回任何 cookie! 在此处输入图像描述

看来,当这两个属性被添加到 express-session 或 cookie-session 中的会话对象时,结果是没有返回 cookie。意思是随后对服务器的 POST 将返回 403,用户未登录。

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

4

1 回答 1

1

您似乎在滥用cookie-session中间件。该cookieSession函数接受一个 JavaScript 对象,但文档没有提到cookie该对象中的任何字段。

中间件会忽略字段中指定的任何内容,cookie并且对生成的 cookie 没有影响;您的 cookie 最终被标记的唯一原因HttpOnly它是中间件的默认行为

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

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

但是,您还有另一个问题。Domain如果我正确解释了您的屏幕截图,您似乎试图chicagomegashop.com在来自https://paylivepmt.com. 那行不通;浏览器会忽略这样的Set-Cookie响应头

用户代理将拒绝 cookie,除非 Domain 属性为 cookie 指定了包含源服务器的范围。

于 2022-01-06T10:55:43.060 回答