与单独的会话共享 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 配置使用不同的 secret
。 These 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.
我在 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 配置使用不同的 secret
。 These 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.