繁体   English   中英

即使设置了 sameSite:'none' 和 secure: 对 MERN 堆栈 web 应用程序而言,cookie 也不会保存在 chrome 中

[英]Cookie is not get saved in chrome even after setting sameSite:'none' and secure: true for a MERN stack web app

在 chrome 中进行最新更新后,浏览器没有保存我的服务器 cookies。 以前,即使显示警告,它也可以正常工作。 但现在不是。

由于我的 react 应用程序托管在 netlify 上,而我的服务器运行在 AWS 上,因此它是跨域的。 因此,我在 express-session 中使用sameSite=None secure选项更改了我的 cookie 设置,如下所示。

app.use(session({
secret: 'my secret',
name: 'my-react-app',
resave: false,
saveUninitialized: true,
cookie: {
  secure: true,
  sameSite: 'none',
  maxAge: 24 * 60 * 60 * 1000,
  httpOnly: true
}
}));

设置secure: true后,它甚至在 firefox 中都不起作用。 该网站通过 https 提供服务。 我已经尝试了几乎所有与这些参数的组合。 我错过了什么吗? 任何帮助,将不胜感激。

我终于找到了解决方案。

实际上,这与我花了很多时间的快速会话设置无关。 这背后的主要原因是错误配置的反向代理。 就我而言,反向代理和应用程序服务器之间的连接不是 https。 因此,不会应用 cookie 中的安全标志,这反过来会导致将 sameSite 选项设置为默认的 'lax' 值。 而且,这就是为什么我的 cookies 在跨域请求中被拒绝的原因。

为了解决这个问题,我必须在代理 header 中设置X-Forwarded-Proto

打开反向代理配置文件

sudo nano /etc/nginx/conf.d/sysmon.conf

就我而言,并添加以下行。

proxy_set_header X-Forwarded-Proto $scheme;

这将通过 https 转发请求。

而且你还需要在express中设置“信任代理”。

var app = express()
app.set('trust proxy', 1) // trust first proxy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM