Почему тайм-аут сеанса не работает, если установлено значение SqlServer?
У меня есть строка:
<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" />
, который хранит сеанс на сервере состояния sql. Однако это не тайм-аут должным образом после одной минуты.
Когда я изменяю строку для использования в режиме InProc:
<sessionState mode="InProc" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" />
Он делает тайм-аут через одну минуту.
Любые идеи, почему это происходит? Как я могу получить его таймаут при использовании SqlServer?
3 ответа:
Если вы используете SQL Server Express, это потому, что нет агента SQL Server для выполнения процедуры DeleteExpiredSessions.
Вот возможный способ решения проблемы:
В хранимую процедуру, обновляющую сеанс, я добавил SQL от процедуры DeleteExpiredSessions до сохраненного сеанса обновления процедура (я не могу вспомнить название), поэтому он проверяет старые сеансы, удаляет старый сеанс, а затем обновляет текущий сеанс. То на хранении процедура обновления сеанса выполняется при каждом щелчке мыши в любом случае, поэтому я добавил еще две строки, которые удаляют старые сеансы перед сеансом обновляемый. Это, кажется, работает нормально.
Убедитесь, что служба агента SQL Server запущена
Щелкните правой кнопкой мыши на задании агента SQL Server с именем
ASPState_Job_DeleteExpiredSessionsи выберите "Просмотр истории" - убедитесь, что это задание успешно выполняется каждые 1 минуту.В моем случае каким-то образом (вероятно, во время одной из нескольких установок с использованием именованных экземпляров) мой агент SQL Server имел свое свойство
Connection -> Alias Localhost Server, заданное только именем сервера, а не имя_сервера\имя_экзамена.Когда это изменение произошло,
ASPState_Job_DeleteExpiredSessionsказалось, что он бежит бесконечно долго и не может быть остановлен. Поэтому я попытался повторно запустить службу агента SQL Server, но она не запустилась. Однако, как только я изменил свойствоConnection -> Alias Localhost Serverна servername\instancename, агент SQL Server запустился сразу же, и заданиеASPState_Job_DeleteExpiredSessionsначало успешно выполняться раз в минуту, как и должно.....и это, очевидно, решило мою проблему тайм-аута.
Вы можете управлять временем ожидания сеанса, установив время ожидания файла cookie проверки подлинности форм:
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, // version txtUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(1), false,@"\");Таким образом, пользователь теряет контакт с сеансом через 1 мин.