Limit czasu uwierzytelniania formularzy a limit czasu sesji sessionState

139

Mam kod, który przeglądam, dotyczący limitów czasu sesji w witrynie. W web.config natknąłem się na ten kod.

 <authentication mode="Forms">
  <forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" />
</authentication>

<sessionState timeout="30" />

Czy ktoś wie, czy jedno ma pierwszeństwo przed drugim i czym się różnią. Dzięki.

Lucky Luke2
źródło

Odpowiedzi:

226

To są różne rzeczy. Wartość Limit czasu uwierzytelniania za pomocą formularzy określa czas w minutach, przez jaki plik cookie uwierzytelniania jest ustawiony jako ważny, co oznacza, że ​​po określonej valueliczbie minut plik cookie wygaśnie, a użytkownik nie będzie już uwierzytelniany - zostanie przekierowany do logowania strona automatycznie. slidingExpiration=trueWartość jest w zasadzie powiedzieć, że tak długo jak użytkownik wysyła żądanie w wartości limitu czasu, będą one nadal być uwierzytelniony (więcej szczegółów tutaj ). Jeśli ustawisz, slidingExpiration=falseplik cookie uwierzytelniania wygaśnie po określonej valueliczbie minut, niezależnie od tego, czy użytkownik zgłosi żądanie w określonym limicie czasu, czy nie.

Wartość SessionStatelimitu czasu określa ilość czasu, przez jaki dostawca stanu sesji jest wymagany do przechowywania danych w pamięci (lub w jakimkolwiek używanym magazynie zapasowym, SQL Server, OutOfProc itp.) Dla określonej sesji. Na przykład, jeśli umieścisz obiekt w sesji przy użyciu wartości z przykładu, dane te zostaną usunięte po 30 minutach. Użytkownik może nadal być uwierzytelniony, ale dane w sesji mogą już nie być obecne. Session TimeoutWartość jest zawsze zerowany po każdym żądaniu.

Ikar
źródło
26
Jedno wyjaśnienie: Limit czasu uwierzytelniania formularzy określa czas wygaśnięcia Biletu, niekoniecznie dla pliku cookie, w którym bilet może być przechowywany. Plik cookie może w ogóle nie mieć czasu wygaśnięcia (myląco nazywany plikiem cookie sesji, co oznacza, że ​​trwa do momentu zamknięcia przeglądarki przez użytkownika) lub może w ogóle nie istnieć (uwierzytelnianie formularzy „bez plików cookie”). W przypadku trwałego pliku cookie, uwierzytelnianie formularzy ustawia wygaśnięcie pliku cookie i wygaśnięcie biletu na ten sam czas.
bmode
13
Kolejne wyjaśnienie z MSDN: „Aby zapobiec pogorszeniu wydajności i uniknąć wielu ostrzeżeń przeglądarki dla użytkowników, którzy mają włączone ostrzeżenia o plikach cookie, plik cookie jest aktualizowany po upływie ponad połowy określonego czasu”. Tak więc limit czasu dla plików cookie jest resetowany tylko wtedy, gdy minie połowę. Stąd sugestia, aby ustawić go na 2x limit czasu sesji.
user917170
21

Wartość slideExpiration = true w zasadzie mówi, że po każdym złożonym żądaniu licznik czasu jest resetowany i tak długo, jak użytkownik wyśle ​​żądanie w ramach wartości limitu czasu, będzie nadal uwierzytelniany.

To nie jest poprawne. Limit czasu pliku cookie uwierzytelniania zostanie zresetowany tylko wtedy, gdy minie połowa limitu czasu.

Zobacz na przykład https://support.microsoft.com/de-ch/kb/910439/en-us lub https://itworksonmymachine.wordpress.com/2008/07/17/forms-authentication-timeout-vs-session -koniec czasu/

Silvan Hofer
źródło
18

Z tego, co rozumiem, są od siebie niezależne. Utrzymując limit czasu sesji mniejszy lub równy limitowi czasu uwierzytelniania, możesz upewnić się, że żadne zmienne sesji specyficzne dla użytkownika nie są utrwalane po upływie limitu czasu uwierzytelniania (jeśli to twój problem, co myślę, że jest normalne, gdy o to pytam pytanie). Oczywiście będziesz musiał ręcznie zająć się usuwaniem zmiennych sesji po wylogowaniu.

Oto przyzwoita odpowiedź, która może odpowiedzieć na twoje pytanie lub przynajmniej wskazać właściwy kierunek:

Przechylony
źródło
7

Różnica polega na tym, że jeden (limit czasu formularzy) ma związek z uwierzytelnianiem użytkownika, a drugi (limit czasu sesji) ma związek z tym, jak długo buforowane dane są przechowywane na serwerze. Są więc bardzo niezależnymi rzeczami, więc jedna nie ma pierwszeństwa przed drugą.

Karl Anderson
źródło
5
      <sessionState timeout="2" />
      <authentication mode="Forms">
          <forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
      </authentication>

Ta konfiguracja wysyła mnie do strony logowania co dwie minuty, co wydaje się zaprzeczać wcześniejszym odpowiedziom

shlasasha
źródło
1
Może się tak zdarzyć, jeśli informacje związane z logowaniem są przechowywane w zmiennych sesji, a po ich usunięciu przekierowuje do logowania. Więc to zależy od kodu?
Steve
0

Każdy, kto natknie się na to pytanie, powinien zapoznać się z dokumentacją firmy MS - zawiera ona naprawdę dobre szczegóły dotyczące ustawienia limitu czasu uwierzytelniania FormsAuthentication.

Ten dokument wyjaśnia szczegółowo komentarz, który bmode tworzy w zaakceptowanej odpowiedzi - o trwałym pliku cookie (sesja a wygasa)

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-security/introduction/forms-authentication-configuration-and-advanced-topics-cs#specifying-the-tickets- wartość limitu czasu

Naren
źródło