0

我有 2 个 Asp.Net Core 2.2 应用程序,我想在它们之间共享会话。我已经在 SQL 数据库中设置了会话,并且都连接正常。它们位于不同的子域上。我知道我可以将 Cookie.Domain 设置为启动文件,这将在基本层面解决问题,因此每个应用程序都会创建 cookie 以便可以访问它。例如

Domain 1. "www.website.com"
Domain 2. "dashboard.website.com"

目前这些站点无法访问彼此的会话 cookie。

如果我将域 cookie 设置为“.website.com”,那么两者都应该能够访问它。

问题是我们有多个使用这个网站的域,所以它可能是:

www.domain1.com
dashboard.domain1.com

www.domain2.com
dashboard.domain2.com

www.domain3.com
dashboard.domain3.com

我需要能够将当前主机名注入启动 cookie 域,以便根据活动网站的域动态设置它。

这是可能吗?

在此先感谢,大卫

4

1 回答 1

0

不,这是不可能的。Cookie 是域绑定的。您可以为 cookie 上的子域部分设置通配符,这样就可以让 、 、 等看到它example.comwww.example.comfoo.example.com您不能与完全不同的域共享,例如example2.com.

在这种情况下,您唯一的选择是 IdentityServer、Auth0、Azure AD 等身份提供程序。这些工作的方式是在提供程序处设置身份验证 cookie,然后针对该提供程序授权每个单独的应用程序。因此,他们可以从提供者那里接收用户主体,而无需实际的身份验证 cookie 或他们自己的登录功能。

更新

如果您只需要在同一主域上的站点之间共享,请按照文档中的说明进行操作。这集中在 auth cookie 上。如果您还需要共享会话,则适用相同的过程,但您还必须具有真正的分布式缓存设置(Redis、SQL Server 等)。有一个分布式内存缓存,但这只是一个默认实现,实际上并不是分布式的。

于 2019-07-26T16:47:23.227 回答