Почему 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" может быть установлен, и он не будет доступен извне.
У вас есть несколько веб-серверов?
Если это так, убедитесь, что ваш ключ машины установлен на то же значение (хотя это должно вызывать исключение)