Express 具有单独会话的共享API

Express 具有单独会话的共享API,express,web-services,http,cross-domain,Express,Web Services,Http,Cross Domain,我有一个API&React应用程序在localhost:4000(应用程序A)下运行,我想从第二个React应用程序localhost:3000(应用程序B)访问应用程序A的API。我正确配置了CORS,允许应用程序B使用凭据向应用程序A发送请求 然而,似乎应用程序A和应用程序B正在共享cookies,也就是说,如果我登录应用程序A,我也将登录应用程序B。大多数情况下,这是你想要的,我看到了许多关于“如何跨域共享cookies”的问题。我的问题不同,因为我想而不是跨域共享cookies,我希望每

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

然而,似乎应用程序A和应用程序B正在共享cookies,也就是说,如果我登录应用程序A,我也将登录应用程序B。大多数情况下,这是你想要的,我看到了许多关于“如何跨域共享cookies”的问题。我的问题不同,因为我想而不是跨域共享cookies,我希望每个域都有自己的cookies集

这可能吗

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

app.use(cors)({
来源:'http://localhost:4000',
options successstatus:200,//一些传统浏览器(IE11、各种智能电视)在204上阻塞
凭据:正确
}))
我从应用程序B(localhost:3000)发出的请求如下所示:

const transport=axios.create({
事实上,
标题:{Pragma:'no cache'},//防止IE11缓存
})
交通,快去http://localhost:4000/api/user')

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

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

例如:

//在应用程序A中
应用程序使用(cookieSession)({
名称:“sessionA”,
}))
//在应用程序B中
应用程序使用(cookieSession)({
名称:'sessionB',
}))
在本例中,应用程序A可以读取B的cookies(反之亦然),但它们将单独存储。如果您需要保护cookie不被其他应用程序读取,您可能还需要为每个应用程序的cookie配置使用不同的
机密

或者如果使用
快速会话

注意:如果在同一主机名上运行多个应用程序(这只是名称,即localhost或127.0.0.1;不同的方案和端口不会命名不同的主机名),则需要将会话cookie彼此分离。最简单的方法是简单地为每个应用程序设置不同的名称


谢谢你的回答!我正在使用
快速会话
,但它有一个类似的界面。我验证了这两个秘密与我的express应用程序不同。然而,我得到了共享cookies的相同结果。当我从应用程序A登录时,我似乎登录了应用程序B,反之亦然。哦,那个库是不同的。您是否尝试在两个应用程序之间设置不同的
名称
注意:如果在同一主机名上运行多个应用程序(这只是名称,即localhost或127.0.0.1;不同的方案和端口不会命名不同的主机名),则需要将会话cookie彼此分离。最简单的方法是简单地为每个应用程序设置不同的名称。我尝试设置不同的
name
s,但运气不好。我还尝试从其他主机打开react应用程序B(即
http://127.0.0.1:3000
),但它仍在将API调用中应用程序A的cookie发送给A。似乎应用程序A无法访问或设置应用程序B的cookie。答案是我需要将应用程序A放在一个单独的主机名上,然后调用它。在本例中,我使用了
http://127.0.0.1:4000
。这将创建一组单独的cookie。这并不是非常理想,因为我必须创建一个别名域,指向应用程序A在生产中的API(即API.appA.com)。