0

Express-Session 在开发环境中工作,因为它在我的浏览器中设置了“connect.sid”cookie。但是,在生产中,它不存储 cookie,而是使用相同的会话 - 它每次都会创建一个新会话。我相信如果我能以某种方式保存第三方 cookie,这个问题就会得到解决,因为我的应用程序是使用 Heroku 部署的。最后,我还使用了 express-cors 来避免 CORS 问题(不知道这是否与 cookie 问题有关)。我在 cors 中设置了 {credentials: true},在 Axios 中也设置了 {withCredentials: true}。

4

3 回答 3

1

问题解决了!-> 添加 sameSite: 'none' Full Cookie config (express-session) 用于生产:

cookie: { httpOnly: true, secure: true, maxAge: 1000 * 60 * 60 * 48, sameSite: 'none' }

于 2021-01-19T01:08:21.517 回答
0

Heroku 使用反向代理。它提供 https 端点,然后将未加密的流量转发到网站。

尝试类似的东西

app.enable('trust proxy')

并查看 https://expressjs.com/en/guide/behind-proxies.html

于 2021-01-18T01:38:56.273 回答
0

在会话配置中添加“名称”属性对我有用:

{
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: true,
    proxy: true, // Required for Heroku & Digital Ocean (regarding X-Forwarded-For)
    name: 'MyCoolWebAppCookieName', // This needs to be unique per-host.
    cookie: {
      secure: true, // required for cookies to work on HTTPS
      httpOnly: false,
      sameSite: 'none'
    }
  }
于 2022-01-15T18:48:49.773 回答