Я знаю, что это старый вопрос, но я боролся с этой же проблемой, и я думаю, что у меня есть решение. Я воспроизвел эти точные симптомы и смог успешно устранить их (по крайней мере, пока).
Только установка истечения срока действия куки, если вы хотите постоянный билет авторизации, устраняет проблему для меня.
Вот мой метод в его нынешнем виде:
internal static void CreateAuthenticationCookie(string userName, bool rememberMe, bool expired = false)
{
int timeout = expired ? -1440 : (rememberMe ? 43200 : 20); // Timeout in minutes, 525600 = 365 days, 1440 = 1 day.
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(timeout), rememberMe, string.Empty);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
if (rememberMe)
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);
HttpContext.Current.Response.Cookies.Add(cookie);
}
А вот как я это называю:
if(createPersistentCookie)
CreateAuthenticationCookie(userName, createPersistentCookie);
else
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
Я понимаю, что по тому, как я его называю, нет необходимости в параметре "запомнить меня" в методе CreateAuthenticationCookie (поскольку в этом случае я всегда передаю значение true), но я еще не реорганизовал его, и он лучше демонстрирует, как кто-то может захотеть его использовать.
Я хотел бы иметь способ легко иметь скользящий срок действия, если пользователь решил не «помнить меня», но если он выбрал «запомнить меня», я не хотел бы ограничиваться 30-минутным тайм-аутом моего не » запомнить меня "пользователи. Моя цель состояла в том, чтобы, если кто-то использует общедоступный компьютер, он получил скользящее истечение срока действия и не помнил меня, но если он использует персональный компьютер, он может «запомнить меня» и не быть ограниченным настройкой таймаута в web.config. Не знаю, что все это относится к вашей ситуации, но я надеюсь, что это кому-нибудь поможет или что моя методология может вызвать некоторую конструктивную критику, чтобы я мог вносить коррективы в случае необходимости.
PS. Вот мои настройки web.config для аутентификации форм:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="30" slidingExpiration="true"/>
</authentication>