2010-02-18 3 views
1

У меня есть 2 поддомена, и мне нужно установить и прочитать тот же файл cookie с обоих сайтов.Asp.NET cookie через субдомены, не обновляющиеся и не истекающие

Когда я использую localhost, все работает нормально.

Когда я переключаюсь на использование действительных URL-адресов, информация о файлах cookie не обновляется при обновлении (истекает срок выхода).

У меня есть домен куки установлен в «.mysite.com»

что не так?

ответ

0

Вот мой код: (отлично работает на локальный, но не субдомен, никогда не регистрирует пользователя, потому что печенье не получает истёк)

Войти Страница:

FormsAuthentication.SetAuthCookie(UserName.Text, true); 
    // set the active collab cookie 
    Member member = MemberManager.GetMemberByUsername(UserName.Text); 

    HttpCookie cookie = new HttpCookie("Token", member.Profile.Token); 
    cookie.Domain = ConfigurationManager.AppSettings["CookieDomain"]; 
    cookie.Expires = DateTime.Now.AddYears(1); 
    Response.Cookies.Add(cookie); 

Глобакс ASAX

if (HttpContext.Current.Request.Cookies["Token"] != null) { 
     string token = HttpContext.Current.Request.Cookies["Token"].Value; 
     if (!string.IsNullOrEmpty(token)) { 
       // If the user is logged in with a different token 
       // or not logged in at all 
       // then log them in with the token from the cookie 
       if ((MemberManager.CurrentMember != null && MemberManager.CurrentMember.Profile.Token != token) || User == null) { 

        Member member = MemberManager.GetMemberByToken(token); 
        if (member != null) { 
         FormsAuthentication.SetAuthCookie(member.User.UserName, true); 
       } 
      } 
       } 
      } 

Выход Код:

if (Request.Cookies["Token"] != null) { 
       HttpCookie aCookie = Request.Cookies["Token"]; 
       aCookie.Expires = DateTime.Now.AddDays(-1); 
       Response.Cookies.Add(aCookie); 
} 

Web.Config

<machineKey 
     validationKey="{-snip-}" 
     decryptionKey="{-snip-}" 
     validation="SHA1" 
     decryption="AES" /> 

<authentication mode="Forms"> 
     <forms name="AuthCookie" 
      path="/" 
      loginUrl="~/login.aspx" 
      protection="All" 
      timeout="60"> 
     </forms> 
    </authentication> 
+0

Во-первых: вы должны обновить свой вопрос, а не сообщать об афере. наблюдения: обычно вам не нужно устанавливать домен cookie. Файлы cookie доступны по всему домену (домен верхнего уровня) и не нуждаются в массировании таким образом. Если ваши приложения находятся в другом TLD, тогда это просто не сработает, хотя я подозреваю, что это не ваша проблема. Кроме того, я не могу понять, чего вы пытаетесь достичь, поэтому я, вероятно, не смогу вам помочь. Кажется, что вы реализуете FormsAuthentication параллельно с другой стратегией управления проверкой подлинности. Каковы ваши причины для этого? –

0

Попробуйте это:

if (Request.Cookies["Token"] != null) { 
       HttpCookie aCookie = Request.Cookies["Token"]; 
       aCookie.Expires = DateTime.Now.AddDays(-1); 
       Response.Cookies["Token"] = aCookie; 
} 

Вместо того, чтобы добавить его, установить его в существующий куки.

+0

Я получаю эту ошибку 'System.Web.HttpCookieCollection.this [string]' не может быть присвоен - он только для чтения – user176657

0

Ваши формы настройки аутентификации в web.config необходимо включить кросс приложение перенаправляет:

<authentication mode="Forms"> 
    <forms loginUrl="~/login.aspx" protection="All" timeout="960" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="false" defaultUrl="~/default.aspx" enableCrossAppRedirects="true"/> 
</authentication> 
+0

Это не повлияло, но спасибо! – user176657

1

Ответ был установить домен куки, когда истекает его на выходе из системы

HttpCookie aCookie = Request.Cookies["Token"]; 
aCookie.Expires = DateTime.Now.AddDays(-1); 
aCookie.Domain = ConfigurationManager.AppSettings["CookieDomain"]; 
Response.Cookies.Add(aCookie); 
Смежные вопросы