Ответ 1
Пару мыслей, прежде чем перейти к возможному решению, почему истекают ваши логины. Во-первых, cookie файл FormsAuthentication и SessionState - это две разные вещи. Вы можете иметь один или другой, или оба, или ни один. В результате таймауты для этих двух элементов также не связаны.
Файл cookie FormsAuthentication - это зашифрованный файл cookie, который содержит некоторую основную информацию, такую как имя пользователя и значение срока действия. Приложение.NET использует этот файл cookie после проверки подлинности пользователя, чтобы узнать, авторизован ли он для определенных ресурсов.
Что контролирует шифрование и дешифрование куки FormsAuthentication, так это MachineKey для этого веб-приложения в IIS. MachineKey - это набор ключей, используемых для шифрования и дешифрования файла cookie. По умолчанию в веб-приложении IIS установлено автоматическое создание ключа компьютера. Это означает, что при запуске приложения генерируется случайный машинный ключ. Если приложение перезагружается, вы получаете новый ключ компьютера. Кроме того, если вы используете хостинг с общим провайдером, веб-хост будет, как правило, сбалансировать нагрузку на ваше приложение, то есть размещаться на нескольких серверах. Каждый из этих серверов будет автоматически генерировать машинный ключ.
Если ваше веб-приложение находится в сценарии с балансировкой нагрузки, то каждый компьютер в веб-ферме не сможет расшифровать другой зашифрованный файл cookie. Это создаст впечатление "выхода из системы". Примером этого является вход в систему на веб-сервере A, затем последующий запрос направляется на веб-сервер B. Веб-сервер B не разделяет ключ компьютера с веб-сервером A и не может расшифровать cookie, отправляя пользователя обратно на страницу входа.
Решение состоит в том, чтобы определить раздел MachineKey в вашем файле web.config, чтобы каждый экземпляр IIS использовал те же ключи, а также, если пул приложений перезагружается, у вас все еще остается тот же ключ компьютера.
Вот пример машинного ключа (используйте версию.NET 2.0), который вы можете поместить в ваш файл web.config.
<system.web>
<machineKey validationKey="EBC1EF196CAC273717C9C96D69D8EF314793FCE2DBB98B261D0C7677C8C7760A3483DDE3B631BC42F7B98B4B13EFB17B97A122056862A92B4E7581F15F4B3551"
decryptionKey="5740E6E6A968C76C82BB465275E8C6C9CE08E698CE59A60B0BEB2AA2DA1B9AB3"
validation="SHA1" decryption="AES" />
</system.web>
Дополнительные мысли заключаются в том, что ваш срок действия в файле web.config(2880) и то, что вы на самом деле устанавливаете для срока действия (120), не совпадают. Вы можете хотеть, чтобы они оба соответствовали.