Кажется, перестает работать cookie проверки подлинности с помощью форм
Я хочу, чтобы в моем приложении была функциональность, которая позволяла бы пользователям отмечать, что они хотят оставаться в журнале бесконечно (произвольно устанавливая срок действия cookie в 3 месяца от СЕЙЧАС).
Код для борьбы с этим
private static HttpCookie GetFormsAuthenticationCookie(string userNameResponse,
bool persistCookie)
{
var cookie = FormsAuthentication.GetAuthCookie(userNameResponse, persistCookie);
if (persistCookie)
cookie.Expires = DateTime.Now.AddMonths(3);
return cookie;
}
private void LoginUser(string userNameResponse, bool PersistCookie)
{
Response.Cookies.Add(GetFormsAuthenticationCookie(userNameResponse, PersistCookie));
string navigateAfterUrl = FormsAuthentication.GetRedirectUrl(userNameResponse,
PersistCookie);
Response.Redirect(navigateAfterUrl);
}
Однако в какой-то момент позже, когда я вернусь на сайт, мне нужно снова войти в систему. Я подтвердил, что файл cookie возвращается с моей датой истечения срока действия и что он не установлен как файл cookie сеанса (также проверен с закрытием / повторным открытием браузера, и файл cookie все еще существует). Одна моя мысль, что это как-то связано с тем, когда ASP.NET истекает сеанс.
В моем файле web.config настроена определенная машинная клавиша, поэтому не должны ли работать те же файлы cookie, если перезапустить IIS и т. Д.? Есть ли у кого-нибудь какие-либо предложения о том, что может быть причиной этого или, по крайней мере, о том, как отследить это дальше, так как я не могу придумать, что еще делать.
1 ответ
При вызове метода GetAuthCookie создается FormsAuthenticationTicket с таймаутом, заданным свойством Timeout в web.config. Поэтому обязательно установите его правильно:
<authentication mode="Forms">
<forms
loginUrl="/someloginUrl"
requireSSL="true"
protection="All"
// This is the setting you are looking for! (it's in seconds)
timeout="120"
domain="example.com"
slidingExpiration="false"
name="cookieName" />
</authentication>
После того, как билет зашифрован, он используется в качестве значения для cookie. Когда вы устанавливаете для свойства Expires файла cookie заданное значение, это указывает на то, что оно будет сохраняться на клиентском компьютере в течение указанного периода. Затем по каждому запросу ASP.NET runtime будет проверять наличие куки, будет пытаться расшифровать значение и получить тикет. Затем он проверит, является ли билет по-прежнему действительным, используя свойство Timeout, поэтому, если у вас небольшой тайм-аут, независимо от того, что ваш cookie-файл все еще передается, билет больше не действителен и аутентификация не удастся.