2012-02-15 6 views
2

cookie.domainというプロパティを使って、サブドメインの代わりにドメイン全体のCookieを作成しようとしているので、2つのサブドメインがCookie情報を共有できます。 IISにデプロイすると、ドメイン用に1つ、サブドメイン用に2つのクッキーが作成されます。何故ですか? Cookieを更新すると、更新されるのはサブドメイン1だけなので、ドメインCookieの種類は役に立たなくなります。なぜcookie.domainは2つのCookieを設定しますか?

私のコードでこれをトレースしようとしましたが、デバッグモードでVisual Studioを実行してもcookie.domainプロパティを設定しない限り、実際にはクッキーが設定されません。 domain.cookieを出ると、localhostに設定されたCookieが取得されますが、そのCookieは1つのみです。何かご意見は?

+0

実際のコードを表示すると、問題をより簡単に診断できます。 – LukeH

+0

あまりにも真実ですが、どちらのコードが責任を負う可能性があるのか​​わかりませんでしたが、おそらく2つのクッキーの作成は何とかデフォルトの動作でした。以下の私の解決策を見てください。 – BeachBum

答えて

2

さて、私はついに自分の質問に答えました。デバッグモードでサイトを実行する方法については、まず2つ目に取り組んでいきます。

サイトhttp:// localhost:[someport]へのビジュアルスタジオデバッグ。 mydomain.comにcookie.domainを使用してCookieを作成するようにコードが設定されている場合、指定したドメインの代わりにlocalhostにいることをブラウザが認識しているため、Cookieは設定されません。これを解決するために、ホストファイルにmydomain.comが127.0.0.1を指すようにエントリを入れました。その後、サイトをデバッグモードで起動しました。サイトがlocalhostとして公開されたら、ブラウザのURLをhttp://subdomain.domain.com:[someport]に変更して更新しました。これでクッキーを設定できます。

これを実行すると、自分のコードをトレースして、サブドメインのウェブサイトで作成された2つのCookieの問題を見つけることができました。私が見つけたのは、cookie.domainのためにmydomain.comのクッキーが作成されていたこと(下のCreateCookieメソッド)です。しかし、私はCookie(UpdateCookie)の有効期限を更新しようとしていたときに、サブドメインCookieを使用しているはずだと思って元に戻り、見つからなかったときに作成しました。クッキーを設定して有効期限を更新する前に、もう一度cookie.domainを設定しなければなりませんでした。今私は1つのクッキーしか持っていません。

public void CreateCookie() 
{ 
    HttpCookie cookie = new HttpCookie(mConfig.webCookie); 
    TimeSpan span = new TimeSpan(0, 0, 30, 0); 
    DateTime time = DateTime.Now; ; 

    cookie["Username"] = mEncrypt.Encrypt(mUser.Username); 
    cookie.Domain = "mydomian.com"; 

    cookie.Expires = time + span; 

    HttpContext.Current.Response.Cookies.Add(cookie); 
} 

public void UpdateCookie() 
{ 
    TimeSpan span = new TimeSpan(0, 0, 30, 0); 
    DateTime time = DateTime.Now; 

    HttpCookie cookie = HttpContext.Current.Request.Cookies[mConfig.webCookie]; 

    // without specifying the domain the cookie will be set with the subdomain 
    cookie.Domain = "mydomain.com"; 
    HttpContext.Current.Response.Cookies.Set(cookie); 

    HttpContext.Current.Response.Cookies[mConfig.webCookie].Expires = time + span; 
} 
0

あなたはhttpCookiesに同じクッキーを持って、あなたの言うことをアーカイブするwww.domain.com domain.comとNOT設定

<httpCookies domain="domain.com" httpOnlyCookies="false" requireSSL="false" /> 

web.configに完全ドメインおよびサブドメインのためのこのクッキー名を設定することができますドメインとサブドメイン。同様に、このクッキー設定を設定し、あなたが話しているクッキーに依存する、認証時のパラメーターがあります。

"なぜですか?"その答えは、クッキーに対してこのパラメータを設定しないと、実際に現在のホスト名が使用されるため、サブドメインの最初の名前が変更された場合は異なります。

+0

私は以下の私の解決策で私のcookie.domain行をコメントアウトし、web.configにhttpCookiesを追加することでこれを試しました。私はまだ2つのクッキーを作成します。一つはドメイン用、もう一つはサブドメイン用です。 – BeachBum

関連する問題