首页 > 解决方案 > 为什么 express-session(SameSite 属性)在 Chrome 上不起作用?

问题描述

我正在使用 Express.js 和 React.js 开发一个 Web 应用程序。我正在使用快速会话,但它不起作用。这就是我使用它的方式:

app.use(session({
  store: new MongoStore({
mongooseConnection: mongoose.connection,
ttl: 365 * 24 * 60 * 60
  }),
  secret: process.env.SESSION_SECRET,
  resave: true,
  saveUninitialized: false,
  cookie: {
maxAge: 24 * 60 * 60 * 1000,
httpOnly: true, 
secure: false,
SameSite: 'strict',
  }
}));

我尝试在真、假、自动和所有可能的组合中使用“安全”。并且总是有同样的 Chrome 问题:

在未来版本的浏览器中,标有 SameSite=None 的 cookie 也必须标有 Secure 以允许在跨站点上下文中设置它们。此行为可防止用户数据通过不安全的连接发送。通过更新 cookie 的属性来解决此问题:如果要在跨站点上下文中设置 cookie,请指定 SameSite=None 和 Secure。请注意,只有通过 HTTPS 发送的 cookie 才能使用 Secure 属性。如果跨站点请求不应设置 cookie,请指定 SameSite=Strict 或 SameSite=Lax

有谁知道如何解决它?

非常感谢。

标签: javascriptnode.jsexpresssession-cookiesexpress-session

解决方案


SameSite: 'strict'是问题!第一个 'S' 在 JavaScript 中应该是小写的sameSite: 'strict'

此外,如果这不能解决您的问题,它是否可能实际上不是同一个站点请求,您需要将其修改为sameSite: none. 我可能是错的,除了你分享的,我什么都不知道,只是想把它扔掉以防万一!


推荐阅读