У меня есть сообщения и жалобы от моего пользователя о том, что они будут использовать экран и сразу же после следующего запроса будут возвращены на экран входа в систему. Это происходит не всегда, а случайно. После просмотра веб-сервера в журнале событий приложений появляется ошибка:
Код события: 4005
Сообщение о событии: проверка подлинности с помощью форм для запроса не удалась. Причина: срок действия билета истек.
Все, что я читаю, начинается с того, что люди спрашивают о веб-садах или балансировке нагрузки. Мы не используем ни один из них. Мы являемся одним сервером Windows 2003 (32-разрядная ОС, 64-разрядное оборудование) с IIS6. Это единственный веб-сайт на этом сервере.
Это поведение не создает никаких исключений приложения или видимых проблем для пользователя. Они просто загружаются обратно на экран входа и вынуждены войти. Как вы можете себе представить, это крайне раздражает и приводит к обратным результатам для наших пользователей.
Вот что я установил в своем web.config для приложения в корне:
<authentication mode="Forms">
<forms name=".TcaNet"
protection="All"
timeout="40"
loginUrl="~/Login.aspx"
defaultUrl="~/MyHome.aspx"
path="/"
slidingExpiration="true"
requireSSL="false" />
</authentication>
Я также читал, что если у вас есть настройки локаций, которые больше не существуют или являются поддельными, у вас могут возникнуть проблемы. Все мои атрибуты пути являются действительными каталогами, поэтому проблем не должно быть:
<location path="js">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="images">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="anon">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="App_Themes">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="NonSSL">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
Единственное, что мне неясно, это то, должно ли мое значение тайм-аута в свойстве форм для заявки на аутентификацию совпадать со значением моего тайм-аута сеанса (определенным в конфигурации приложения в IIS). Я читал некоторые вещи, в которых говорится, что время аутентификации должно быть короче (40), чем время сеанса (45), чтобы избежать возможных осложнений. В любом случае, у нас есть пользователи, которых выводят на экран входа в систему через минуту или две после их последнего действия. Так что сессия определенно не должна заканчиваться.
Обновление 2/23/09: с тех пор я установил значения времени ожидания сеанса и билета проверки подлинности равными 45, и проблема, похоже, все еще возникает.
Единственный другой файл web.config в приложении находится в 1 виртуальном каталоге, в котором находится Сервер совместной работы. Настройки аутентификации web.config следующие:
<authentication mode="Forms">
<forms name=".TcaNet"
protection="All"
timeout="40"
loginUrl="~/Login.aspx"
defaultUrl="~/MyHome.aspx"
path="/"
slidingExpiration="true"
requireSSL="true" />
</authentication>
И хотя я не верю, что это применимо, если вы не в веб-саду, оба значения машинных ключей в обоих файлах web.config установлены одинаково (для удобства удалены):
<machineKey
validationKey="<MYVALIDATIONKEYHERE>"
decryptionKey="<MYDECRYPTIONKEYHERE>"
validation="SHA1" />
<machineKey
validationKey="<MYVALIDATIONKEYHERE>"
decryptionKey="<MYDECRYPTIONKEYHERE>"
validation="SHA1"/>
Любая помощь с этим будет принята с благодарностью. Похоже, это одна из тех проблем, которая дает массу результатов Google, но ни одна из них пока не вписывается в мою ситуацию.