почему cookie.domain устанавливает два куки? - PullRequest
2 голосов
/ 16 февраля 2012

Я пытаюсь получить поддомен для создания файла cookie для всего домена, а не только для его поддомина, используя свойство cookie.domain, поэтому два поддоменов могут совместно использовать информацию о файлах cookie. При развертывании в IIS создается 2 файла cookie, один для домена, а другой для субдомена. Это почему? Когда я обновляю файл cookie, обновляется только субдомен, что делает файл cookie домена бесполезным.

Я пытался отследить это через мой код, но запуск Visual Studio в режиме отладки фактически не устанавливает никаких файлов cookie, если только я не установил свойство cookie.domain. Оставляя domain.cookie, я получаю cookie, установленный на localhost, но только этот один cookie. Какие-нибудь мысли?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Хорошо, так что я наконец-то ответил на свой вопрос.Сначала я расскажу о втором, о запуске сайта в режиме отладки:

Visual Studio отлаживает на сайте http://localhost:[someport]. Так что, если установлен код для создания файла cookie с использованием cookie.domain для mydomain.comcookie не установлен, потому что браузер знает, что вы находитесь на локальном хосте вместо указанного домена.Чтобы исправить это, я поместил запись в свой файл hosts, чтобы mydomain.com указывал на 127.0.0.1.Затем я запустил сайт в режиме отладки.Когда сайт стал локальным, я изменил URL-адрес в браузере на http://subdomain.domain.com:[someport] и обновил его.Теперь можно установить cookie.

Это помогло мне отследить мой код, чтобы найти проблему двух файлов cookie, создаваемых веб-сайтом моего субдомена.Я обнаружил, что cookie mydomain.com создавался нормально (метод CreateCookie ниже) из-за cookie.domain.Тем не менее, когда я пытался обновить срок действия файла cookie (UpdateCookie ниже), он снова вернулся к мысли, что должен использовать cookie субдомена, и продолжил работу и создал его, когда не нашел его.Все, что мне нужно было сделать, это снова установить cookie.domain, прежде чем устанавливать cookie и обновлять срок действия.Теперь у меня есть только одно печенье.

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 голосов
/ 16 февраля 2012

Вы можете установить это имя файла cookie для полного домена и субдомена на web.config на httpCookies

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

, чтобы настроить domain.com, а НЕ www.domain.com, чтобы архивировать то, что вы говорите, чтобыиметь один и тот же файл cookie для домена и дочернего домена.Похоже, есть параметр аутентификации, который вы устанавливаете в настройках cookie, зависит от того, о каком cookie вы говорите.

В вашем вопросе "почему это так?"Ответ заключается в том, что если вы не установите эти параметры для файлов cookie, тогда файлы cookie фактически используют текущее имя хоста, поэтому они отличаются, если имя субдомена меняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...