与单独的会话共享 API

Shared API with Separate Sessions

我在 localhost:4000(应用程序 A)下有一个 API 和 React 应用程序 运行,我想从第二个 React 应用程序 localhost:3000(应用程序 B)。我正确配置了 CORS 以允许应用程序 B 使用凭据向应用程序 A 发送请求。

但是,app A和app B似乎在共享cookie,也就是说,如果我在app A上登录,我也会在app B上登录。大多数时候这就是你想要的,我已经看到很多类似“如何跨域共享 cookie”的问题。我的问题不同,因为我想 跨域共享 cookie,我希望每个域都有自己的一组 cookie。

这可能吗?

我正在使用 express cors,我在应用程序 A 上的 API 配置如下所示:

app.use(cors({
    origin: 'http://localhost:4000',
    optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
    credentials: true
  }))

来自应用程序 B (localhost:3000) 的请求如下所示:

const transport = axios.create({
    withCredentials: true,
    headers: { Pragma: 'no-cache' }, //prevent IE11 cacheing
  })

transport.get('http://localhost:4000/api/user')

再次,应用 B 可以在同一浏览器中访问应用 A 的 cookie,这不是我想要的。任何帮助将不胜感激:)

如果两个 API 使用相同的 cookie 机制(表示 cookie-session),您可能希望在每个应用程序中使用单独的 cookie 名称。

例如:

// in app A
app.use(cookieSession({
  name: 'sessionA',
}))
// in app B
app.use(cookieSession({
  name: 'sessionB',
}))

在此示例中,应用程序 A 可以读取 B 的 cookie(反之亦然),但它们将单独存储。如果您需要保护 cookie 不被其他应用程序读取,您可能还想探索对每个应用程序的 cookie 配置使用不同的 secretThese docs explain the keys and secret options.

或者如果使用 express-session

https://github.com/expressjs/session#name

Note if you have multiple apps running on the same hostname (this is just the name, i.e. localhost or 127.0.0.1; different schemes and ports do not name a different hostname), then you need to separate the session cookies from each other. The simplest method is to simply set different names per app.