2011-08-19 9 views
5

mam wiersz:Dlaczego nie jest ustawiony limit czasu sesji po ustawieniu na SqlServer?

<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

który przechowuje sesję w SQL Server państwowej. Jednak nie upłynął on poprawnie po upływie minuty.

Kiedy zmienić linię do korzystania z trybu InProc:

<sessionState mode="InProc" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

Czyni limit czasu po upływie jednej minuty.

Jakieś pomysły, dlaczego tak się dzieje? Jak mogę uzyskać limit czasu podczas korzystania z SqlServer?

Odpowiedz

6

Jeśli używasz programu SQL Server Express, dzieje się tak, ponieważ nie ma agenta SQL Server, który wykonałby procedurę DeleteExpiredSessions.

Oto możliwe obejście problemu:

w procedurze przechowywanej, który aktualizuje sesję, dodałem SQL z procedurą DeleteExpiredSessions do sesji aktualizacji procedury przechowywanej (nie pamiętam nazwa), aby sprawdzić stare sesje, usuwa starą sesję, a następnie aktualizuje bieżące sesje. Procedura przechowywana aktualizująca sesję działa po każdym kliknięciu, tak, , więc dodałem dwie linie, które usuwają stare sesje, zanim sesja zostanie zaktualizowana. To wydaje się działać dobrze.

1

Możesz być w stanie kontrolować limit czasu sesji przez ustawienie limitu czasu cookie uwierzytelniania formularzy:

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

W ten sposób użytkownik traci kontakt z sesji po 1 min.

+0

Limit czasu uwierzytelniania formularzy i limit czasu sesji to dwie oddzielne rzeczy. – KingOfHypocrites

6
  1. Upewnij się, że usługa SQL Server Agent jest uruchomiony

  2. prawym przyciskiem myszy na zadanie agenta programu SQL Server o nazwie ASPState_Job_DeleteExpiredSessions i kliknij „Zobacz historię” - Upewnij się, że ta praca jest uruchomiony pomyślnie każdy 1 minuta.

W moim przypadku jakoś (prawdopodobnie podczas jednej z wielu instalacjach obejmujących nazwanych wystąpień) mój SQL Server Agent miał swoją nieruchomość Connection -> Alias Localhost Server zestaw tylko nazwa serwera, a nie na nazwa_serwera \ nazwa_wystąpienia.

Po wprowadzeniu tej zmiany urządzenie ASPState_Job_DeleteExpiredSessions mogło działać bezterminowo i nie mogło zostać zatrzymane. Tak więc, próbowałem ponownie uruchomić usługę agenta SQL Server, ale nie uruchomił on kopii zapasowej. Jednak po zmianie właściwości Connection -> Alias Localhost Server na nazwa_serwera \ nazwa_instancji, SQL Server Agent uruchomił się z powrotem, a zadanie ASPState_Job_DeleteExpiredSessions zaczęło działać z powodzeniem raz na minutę, tak jak powinno ..... i to oczywiście rozwiązało mój problem z przekroczeniem limitu czasu.

+0

Dzięki, to zadziałało dla mnie –

Powiązane problemy