我有一个域名,有多个网站在它下面。
在我的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将具有相同的名称
我想要的是获取当前域,例如mydomain.com,然后将其附加到我在Startup.cs中指定的每个站点的显式cookiename,例如
var domain = "get the server domain here somehow e.g. domain.com";
...
options.Cookies.ApplicationCookie.CookieName = "MyAppName." + domain;我该怎么做呢?
我问这个的原因是:
我可以在Chrome开发者工具中看到cookies位于我正在访问的站点的单独域名下。然而,有时我仍然会遇到这样的情况:当我在两台不同的服务器上登录同一站点时,我无法登录其中一台,而且它也没有记录任何错误。唯一的解决方案是使用另一个浏览器,所以我只能假设根据症状只能与cookie有关。
因此,我的问题实际上只是一个个人偏好问题,因为在我的环境中,我更喜欢将域名附加到cookie名称之后,尽管cookie只能属于特定的域。
发布于 2016-10-13 22:01:56
首先,我会在配置中存储域名。因此它将使我能够针对当前环境更改它。
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();
});https://stackoverflow.com/questions/40020135
复制相似问题