Почему тайм-аут сеанса не работает, если установлено SqlServer? - PullRequest
5 голосов
/ 19 августа 2011

У меня есть строка:

<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 ]

6 голосов
/ 19 августа 2011

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

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

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

6 голосов
/ 08 марта 2012
  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 на имя_сервера \ имя_экземпляра, агент SQL Server запустился сразу же, и задание ASPState_Job_DeleteExpiredSessions запустилось успешно, раз в минуту, как и должно было .....

1 голос
/ 19 августа 2011

Вы можете контролировать время ожидания сеанса, установив время ожидания файла cookie проверки подлинности форм:

FormsAuthenticationTicket authTicket = 
new FormsAuthenticationTicket(1, // version
txtUserName.Text,
DateTime.Now, 
DateTime.Now.AddMinutes(1),
false,@"\");

Таким образом, пользователь теряет связь с сеансом через 1 мин.

...