Файл cookie Asp.NET в поддоменах не обновляется и не истекает - PullRequest
1 голос
/ 19 февраля 2010

У меня есть 2 субдомена, и мне нужно установить и прочитать один файл cookie с обоих веб-сайтов.

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

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

У меня домен cookie, установленный на ".mysite.com"

что не так?

Ответы [ 4 ]

1 голос
/ 19 февраля 2010

Ответ состоял в том, чтобы установить домен в cookie при истечении срока действия при выходе из системы

HttpCookie aCookie = Request.Cookies["Token"];
aCookie.Expires = DateTime.Now.AddDays(-1);
aCookie.Domain = ConfigurationManager.AppSettings["CookieDomain"];
Response.Cookies.Add(aCookie);
0 голосов
/ 19 февраля 2010

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

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

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

0 голосов
/ 19 февраля 2010

Для настройки проверки подлинности с помощью форм в файле 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 голосов
/ 19 февраля 2010

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

Страница входа:

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

Globax 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>
...