Почему cookie.ASPAUX не проверяется FormsAuthentication?

У меня есть сайт, который использует FormsAuthentication, и да, имя куки.ASPAUX:)

Я могу войти в систему отлично. Сервер создает билет для проверки подлинности с помощью форм, упаковывает его в файл cookie, правильно определяет срок действия (1 год вперед) и отправляет его клиенту.

По какой-то причине, через некоторое время, даже несмотря на то, что cookie уже есть (я вижу его с помощью FireCookies), HttpContext.Current.Request.IsAuthenticated становится ложным на сервере. Как будто cookie не может быть проверено.

Проблема в том, почему это случилось? Как я могу отладить, почему cookie внезапно становится недействительным без истечения срока действия?

РЕДАКТИРОВАТЬ

Вот метод входа в систему:

public static bool Login(int id)
        {
            try
            {
                string securityToken = UserHelper.AuthenticateUser(id);

                DateTime expiryDate = DateTime.Now.AddYears(1);
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                     1, id.ToString(), DateTime.Now, expiryDate, true,
                     securityToken, FormsAuthentication.FormsCookiePath);

                string encryptedTicket = FormsAuthentication.Encrypt(ticket);
                HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                cookie.Expires = expiryDate;

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

                return true;
            }
            catch
            {
                return false;
            }
        }

И web.config:

<authentication mode="Forms">
            <forms loginUrl="~/Login.aspx" timeout="2880" slidingExpiration="true"/>
        </authentication>

2 ответа

Решение

Установить статические машинные ключи в вашем файле web.config, чтобы убедиться, что ключ шифрования, использованный при создании вашего билета, выживает при повторном использовании пула приложений (или ваш веб-сайт перезапускается на веб-сервере ASP.NET)?

Также см. Раздел "Билеты на проверку подлинности с помощью форм" этой статьи библиотеки MSDN.

Несколько вещей, о которых я могу подумать, чтобы проверить:

У вас есть несколько доменов (в том числе www.domain.com против domain.com )?

Если это так, либо установите домен в куки как domain.com или убедитесь, что вы всегда используете один и тот же домен

Вы используете HTTPS?

Если это так, убедитесь, что у вас всегда есть доступ к cookie через HTTPS или что Secure установлено в false на HttpCookie (в противном случае он доступен только по HTTPS-запросам)

Вы пишете куки из виртуального каталога?

Если это так, "cookie" может быть установлен, и он не будет доступен извне.

У вас есть несколько веб-серверов?

Если это так, убедитесь, что ваш ключ машины установлен на то же значение (хотя это должно вызывать исключение)

Другие вопросы по тегам