2016-10-13 20 views
1

ドメインの下に複数のサイトがあります。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(); 

を持っている私のStartup.cs

他のサイトのCookieと同じ名前が付いています

私が望むのは、現在のドメイン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; 

どうすればよいですか?

私が尋ねる理由:

私はクッキーは、私がアクセスしていますが、サイトの別のドメイン名に該当Chromeデベロッパーツールで見ることができます。しかし、私はときどき何とかして、2つの異なるサーバー上の同じサイトにログインする状況を取得します.1つはログインできず、エラーは記録されません。唯一の解決策は、別のブラウザを使用することです。そのため、症状によってはクッキーとしか関係がないと仮定することができます。

私の環境ではクッキーは特定のドメインにしか属していないが、私はクッキー名にドメイン名を追加する方が好きなので、私の質問は本当に個人的な好みの質問です。

+0

を見ますクッキーはすでに分離されています。私は実際に実際の問題を取得していません –

+0

はい、Chromeの開発ツールを見ると、Cookieは各ドメインの下に別々にあります。私が特定の理由でではなく、これをやりたければ、私の個人的な好みのドメイン名を含むようにしてください。 – devc2

答えて

1

まず、構成にドメイン名を格納します。だから私は現在の環境のためにそれを変更することができます。

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

あなたは、このようなサインインイベントにクッキーオプションを無効にすることができますこの方法が気に入らない場合は(私は方法を下回ることを確認していないが良いです):

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

彼らは別々のdomaiを持っている場合も、同様の質問How to get base url without accessing a request

+0

私は最近Dockerに移動しました。私のウェブサーバはlocalhost:5000を聞きますが、実際には:80でホストされています。したがって、Startup.csからホストパラメータを確認するのはほとんど役に立ちません。だから私のために、設定は最も簡単で、最も柔軟な方法です。 –

+0

@Rob van der Veerのように、2つ以上のドメインにサービスを提供するアプリケーションがあるため、あなたのケースでは最高だが、誰にとってもそうはならない。 – Sergey

関連する問題