ASP.Net Forms Authentication Выход пользователей из системы через 10 минут

У меня действительно очень серьезная проблема: когда бы я ни пытался, пользователь выходит из системы через 10 минут.

Я использую ASP.Net 2.0 на IIS 6.0 на Server 2003 R2 Standard Edition, работающем как виртуальный сервер со всеми применимыми обновлениями и.Net 3.5 SP1.

Клиент Internet Explorer 7.0

Ниже приведены настройки web.config:

<!-- Authentication Mode -->
<authentication mode="Forms">
  <forms name=".RecipeViewer" timeout="240" />
</authentication>

Ниже приведен код, используемый для установки куки авторизации:

Private Sub SetCookie(userName)
                ' Use security system to set the UserID within a client-side Cookie
                Dim ticket As New FormsAuthenticationTicket(1,userName, DateTime.Now, DateTime.Now.Add(Me.GetFormsAuthSettings.Forms.Timeout), True, String.Empty, FormsAuthentication.FormsCookiePath)
                Dim hash As String = FormsAuthentication.Encrypt(ticket)
                Dim cookie As New HttpCookie(FormsAuthentication.FormsCookieName, hash)

                cookie.HttpOnly = True

                If (ticket.IsPersistent) Then
                    cookie.Expires = ticket.Expiration
                End If

                Response.Cookies.Add(cookie)

                ' Redirect browser back to originating page
                Response.Redirect(Request.ApplicationPath)
End Sub

    Private Function GetFormsAuthSettings() As System.Web.Configuration.AuthenticationSection
        Return DirectCast(System.Configuration.ConfigurationManager.GetSection("system.web/authentication"), System.Web.Configuration.AuthenticationSection)
    End Function

Ранее я использовал FormsAuthentication.SetAuthCookie, а также даже пробовал методы FormsAuthentication.RedirectFromLoginPage, но у них обоих был один и тот же результат, поэтому я в итоге выполнил реализацию жесткого cookie, которая выполняется внутри (через просмотр в Reflector), что Класс FormsAuthentication делает.


Эта проблема НЕ воспроизводится в среде размещения Visual Studio 2008 asp.net или в IIS 7.0.


РЕДАКТИРОВАТЬ: Cookies включены, даже размещенный сайт был добавлен как надежный сайт.


РЕДАКТИРОВАТЬ: Google Chrome и Firefox не имеют этой проблемы.


РЕДАКТИРОВАТЬ: установленный срок действия Cookie на целевой машине истекает через 4 часа в соответствии с настройкой (время ожидания = 240 минут).


РЕДАКТИРОВАТЬ: Как говорит Хаус, все лгут. Пользователь на самом деле не тестировал новую кодовую базу и исходил из предвзятого мнения, что программное обеспечение все еще не работает. Спасибо всем, кто ответил в этой теме.

Не закрывайте это для более неактуального, но держите это, чтобы помочь людям решить проблему, поскольку в этом вопросе есть некоторые действительно хорошие методы устранения проблем.

7 ответов

Решение

Также могло быть (было), что машинный ключ не был установлен и, таким образом, генерировался случайным образом каждый раз при инициализации приложения (что означало бы, что зашифрованный билет аутентификации будет добавлен с новым ключом).

Я использую сайт для генерации нового машинного ключа для своих приложений и вставляю его в web.config:

http://www.orcsweb.com/articles/aspnetmachinekey.aspx

<?xml version="1.0"?>

<configuration>

    <appSettings/>
    <connectionStrings/>
    <system.web>

        <machineKey validationKey='FED01BCB246D3477F5854D60388A701508AD1DF9099BD3CAC3CA4DAF55F7524B8DD3FA03133BBCA381BC1CD639730445968DFA633A97911187EF187456D692F4' decryptionKey='861E7DF7C2D04297EEFAD47FF3B95F54E87CF28D6C2753D8' validation='SHA1'/>

    </system.web>
</configuration>

Хотя ваше требование относится к IE, вы можете использовать Firefox с Firebug и FireCookie для отслеживания ваших файлов cookie и истечения срока их действия.

В IE вы можете загрузить IE Developer Toolbar, в котором вы можете увидеть значения ваших куки, используя меню Cache \ View Cookie Information.

Странно, если он работает правильно в Google Chrome, возможно, вы можете захватить запрос с помощью события Application_BeginRequest в global.asax и записать полученные куки и их значения.

Необработанные исключения могут быть причиной перезапуска процесса. Это может добавить к странному поведению. Есть ли что-нибудь сообщенное в журналах событий?

Измените свое состояние сеанса так, чтобы оно сохранялось с помощью InProc, и вы, вероятно, столкнулись с проблемой, аналогичной моей, когда пользователь сталкивался с ошибкой, сеанс фактически просто умирал каждый раз, когда он не сохранялся с помощью InProc.

Типы сессий: http://msdn.microsoft.com/en-us/library/ms178586(v=vs.100).aspx

Я смутно припоминаю, что настройки времени ожидания сеанса IIS могут переопределять все, что вы установили в файле web.config. Убедитесь, что в свойствах вашего приложения не установлено время ожидания 10 минут (свойства-> конфигурация-> параметры).

Клиент не тестировал производственный код и все еще отвечал на предыдущую проблему, прежде чем исправление было применено к их производственной среде.

Если вы не можете воспроизвести его в той же среде, я бы порекомендовал встречу, на которой вы сможете посмотреть, как они повторяют проблему.


Отметить это как ответ через 48 часов.

У меня была похожая проблема в прошлом, но я не уверен, что это то, о чем вы говорите. Правильно ли я понимаю, что ваша проблема не возникает в производственных системах (или в системах с частой загрузкой)? Если это так, проблема может заключаться в тайм-ауте рабочего потока. Вы можете попробовать изменить его или отключить в IIS Manager-> щелкните правой кнопкой мыши Пулы приложений, перейдите на вкладку "Быстродействие", это флажок в поле "Время ожидания простоя". Материал на вкладке "Переработка" этого диалогового окна также может быть вам интересен.

Другие вопросы по тегам