(см. Вопрос ниже для получения дополнительной информации):
Есть ли ситуации, в которых
<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"/>
в web.config не удастся автоматически сгенерировать новый machineKey при перезапуске пула приложений? Это поведение, которое я вижу ...
Я использую стандартную ASP.NET FormsAuthentication в приложении MVC. Если я войду в систему с помощью FormsAuthentication.GetAuthCookie
и не использую постоянный файл cookie (полагаясь на сеанс браузера, чтобы запомнить мое авторизованное состояние), я ожидаю, что переработка пула приложений IIS сделает недействительными знания сеанса об этом файле cookie ... и, таким образом, выйдите из системы всех пользователей, у которых нет постоянных файлов cookie.
Это происходит при одной из моих установок IIS (XP), но в другой конфигурации IIS (Server 2K3) файл cookie FormsAuthentication (под стандартным именем «.ASPXAUTH») остается действительным и продолжает авторизовать пользователя.
Кто-нибудь знает, почему это происходит или какая конфигурация контролирует это поведение?
Очевидно, что переработка пула приложений не контролирует, отправляет ли браузер cookie .ASPXAUTH или нет (пока я не закрыл свой браузер и срок действия cookie не истек).
В случае установки IIS, которая должным образом запрещает аутентификацию после перезагрузки, я вижу входящий файл cookie в Request.Cookies
во время события Application_BeginRequest
... но как только элемент управления переходит к следующему событию, доступному в Global.asax.cs (Application_AuthenticateRequest
), файл cookie был удален из коллекции Request.Cookies
.
Почему этого не происходит для обеих конфигураций IIS / ASP.NET?
Если это не ясно, более простой способ сформулировать вопрос:
Почему HttpContext.Current.Request.Cookies[".ASPXAUTH"]
изменяется от {System.Web.HttpCookie}
до нуля, когда я выполняю шаг, в одном запросе, с Application_BeginRequest
до Application_AuthenticateRequest
?
Больше отладочной информации:
Если я присоединю следующий код к событию FormsAuthentication_OnAuthenticate Global.asax.cs ...
var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
var val = cookie.Value;
try
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(val);
}
catch (Exception)
{
}
}
... затем во время запроса до Я перезапускаю пул приложений IIS, исключений не будет. После перезапуска пула приложений IIS, когда из браузера отправляется точно такой же файл cookie .ASPXAUTH, возникает криптографическое исключение («Заполнение недопустимо и не может быть удалено».)
Почему это?