Почему тайм-аут сеанса не работает, если установлено значение 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 5

3 ответа:

Если вы используете SQL Server Express, это потому, что нет агента SQL Server для выполнения процедуры DeleteExpiredSessions.

Вот возможный способ решения проблемы:

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

  1. Убедитесь, что служба агента SQL Server запущена

  2. Щелкните правой кнопкой мыши на задании агента 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 мин.