我的域名下面有多个网站。
在我的Startup.cs
我有以下代码
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
{
options.Cookies.ApplicationCookie.CookieName = "MyAppName";
options.Cookies.ApplicationCookie.ExpireTimeSpanTimeSpan.FromMinutes(300);
})
.AddEntityFrameworkStores<MyDbContext, Guid>()
.AddDefaultTokenProviders();
在生产机器上,我的所有网站都位于IIS
中同一网站下的子文件夹中,因此我不想使用默认域名作为Cookie名称,否则不同的网站Cookie将具有相同的名称
我想要的是获取当前域名e..g mydomain.com,然后将其附加到我在Startup.cs
中指定的每个网站的显式cookiename,例如
var domain = "get the server domain here somehow e.g. domain.com";
...
options.Cookies.ApplicationCookie.CookieName = "MyAppName." + domain;
我该怎么做?
我问的原因是:
我可以在Chrome开发者工具中看到,Cookie属于我访问的网站的单独域名。但是,当我在两个不同的服务器上登录同一站点时,我有时会得到这种情况,我无法登录到一个并且它不会记录任何错误。唯一的解决方案是使用另一个浏览器,所以我只能假设症状只能与cookie有关。
所以我的问题实际上只是个人偏好问题,因为在我的环境中我更愿意将域名附加到cookie名称,尽管cookie只能属于特定域。
答案 0 :(得分:1)
首先,我会在配置中存储域名。因此,它可以让我根据当前环境进行更改。
options.Cookies.ApplicationCookie.CookieName = Configuration["DomainName"];
如果你不喜欢这种方式,你可以在这样的登录事件上覆盖cookie选项(我不确定下面的方法是好的):
Events = new CookieAuthenticationEvents()
{
OnSigningIn = async (context) =>
{
context.Options.CookieName = "MyAppName." + context.HttpContext.Request.Host.Value.ToString();
}
}
或者在配置和覆盖选项中捕获第一个请求
bool firstRequest = true;
app.Use(async (context, next) =>
{
if(firstRequest)
{
options.CookieName = "MyAppName." + context.HttpContext.Request.Host.Value.ToString();
firstRequest = false;
}
await next();
});