2016-10-13 3 views
1

도메인 아래에 여러 개의 사이트가있는 도메인이 있습니다. 에서Startup.cs에서 현재 도메인 이름을 얻는 방법

Startup.cs 그래서 나는 쿠키로 기본 도메인을 사용하지 않는 모든 내 사이트 IIS에서 같은 사이트 아래에 하위 폴더에있는 생산 시스템에서 다음 코드

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(); 

에게 있습니다 이름이 다른 경우 다른 사이트 쿠키는 동일한 이름을 갖습니다.

내가 원하는 것은 현재 도메인 e..g mydomain.com을 얻은 다음 내가 지정한 사이트 당 명시적인 cookiename에 추가하는 것입니다. Startup.cs

var domain = "get the server domain here somehow e.g. domain.com"; 
... 
options.Cookies.ApplicationCookie.CookieName = "MyAppName." + domain; 

어떻게하면됩니까?

이유는 물어 :

내가 쿠키 내가 접근하고있는 사이트의 별도의 도메인 이름에 해당 크롬 개발자 도구를 볼 수 있습니다. 그러나 때로는 어떻게 든 두 개의 다른 서버에 동일한 사이트에 로그인 할 때 상황에 대한 정보를 얻을 수 있습니다. 로그인 할 수 없으며 오류가 기록되지 않습니다. 유일한 해결책은 다른 브라우저를 사용하는 것입니다. 따라서 증상만으로 쿠키와 관련 있다고 가정 할 수 있습니다.

제 질문은 제 환경과 마찬가지로 쿠키가 특정 도메인에만 속할 수 있지만 쿠키 이름에 도메인 이름을 추가하는 것이 좋습니다.

+0

참조 쿠키는 이미 분리되어 있습니다. 실제 문제가 발생하지 않습니다. –

+0

예 Chrome dev 도구를 보면 쿠키가 각 도메인 아래에 있습니다. 특별한 이유가 아니라 단지 쿠키 이름에 내 개인적인 취향에 맞는 도메인 이름이 포함되어 있다고 가정합시다. – devc2

답변

1

우선, 구성에 도메인 이름을 저장합니다. 그래서 그것은 내가 현재 환경을 위해 그것을 바꿀 수있게 할 것이다.

options.Cookies.ApplicationCookie.CookieName = Configuration["DomainName"]; 

당신이이 같은 로그인의 이벤트에 쿠키 옵션을 재정의 할 수 있습니다이 방법은 (i 좋은 방법은 아래 확실하지 않다) 마음에 들지 않으면 :

Events = new CookieAuthenticationEvents() 
{ 
    OnSigningIn = async (context) => 
    { 
     context.Options.CookieName = "MyAppName." + context.HttpContext.Request.Host.Value.ToString(); 
    } 
} 

을 또는 구성에 첫 번째 요청을 잡아 그들은 별도의 domai이있는 경우 재정의 옵션은

 bool firstRequest = true; 
     app.Use(async (context, next) => 
     { 
      if(firstRequest) 
      { 
       options.CookieName = "MyAppName." + context.HttpContext.Request.Host.Value.ToString(); 
       firstRequest = false; 
      } 
      await next(); 
     }); 

또한 비슷한 질문 How to get base url without accessing a request

+0

최근에 Docker로 옮겼습니다. 내 웹 서버가 localhost : 5000을 청취하는 동안 실제로는 : 80에 호스트되므로 Startup.cs에서 호스팅 매개 변수를 확인하는 데 거의 사용되지 않습니다. 그래서 나를 위해 구성 설정이 가장 쉽고 쉽고 유연합니다. –

+0

@Rob van der Veer, 당신이 말했듯이, 당신의 경우에는 최상일 수 있지만, 하나 이상의 도메인을 지원하는 응용 프로그램이 있기 때문에 모든 사람을위한 것이 아닙니다. – Sergey

관련 문제