Pra*_*g k 5 cookies node.js express reactjs express-session
Chrome 最新更新后,浏览器不再保存我的服务器 cookie。以前,即使显示警告,它仍然可以工作。但现在不是了。
由于我的 React 应用程序托管在 netlify 上,而我的服务器在 AWS 上运行,因此它是跨源的。因此,我在快速会话中更改了 cookie 设置,sameSite=None secure选项如下。
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
}
}));
Run Code Online (Sandbox Code Playgroud)
设置完之后secure: true,在firefox下就不行了。该网站通过 https 提供服务。我已经尝试了这些参数的几乎所有组合。我错过了什么吗?任何帮助,将不胜感激。
我终于找到了解决方案。
实际上,这与我花了很多时间的快速会话设置没有太大关系。其背后的主要原因是反向代理配置错误。就我而言,反向代理和应用程序服务器之间的连接不是 https。因此,不会应用 cookie 中的安全标志,这又会导致将 SameSite 选项设置为默认的“lax”值。而且,这就是我的 cookie 在跨源请求中被拒绝的原因。
为了解决这个问题,我必须X-Forwarded-Proto在代理标头中进行设置。
打开反向代理配置文件
sudo nano /etc/nginx/conf.d/sysmon.conf
Run Code Online (Sandbox Code Playgroud)
就我而言,并添加以下行。
proxy_set_header X-Forwarded-Proto $scheme;
Run Code Online (Sandbox Code Playgroud)
这将通过 https 转发请求。
并且你还需要在express中设置“信任代理”。
var app = express()
app.set('trust proxy', 1) // trust first proxy
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2204 次 |
| 最近记录: |