2013-07-23 17 views
104

Mam kod, który przeglądam w odniesieniu do limitów czasu sesji na stronie. W web.config natknąłem się na ten kod.Limit czasu uwierzytelniania formularzy vs sessionState timeout

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

<sessionState timeout="30" /> 

Czy ktoś wie, czy weźmie precedens nad drugim, i jak są one różne. Dzięki.

+0

Możliwy duplikat [Forms Authentication Timeout vs Session Timeout] (http: // stackoverflow.com/questions/1470777/forms-authentication-timeout-vs-session-timeout) –

Odpowiedz

173

Są różne rzeczy. Wartość Limit czasu uwierzytelnienia formularza określa czas w minutach, w którym plik cookie uwierzytelniający jest ustawiony jako ważny, co oznacza, że ​​po value minutach, plik cookie wygaśnie, a użytkownik nie będzie już uwierzytelniany - zostaną przekierowani do strona logowania automatycznie. Wartość slidingExpiration=true mówi po prostu, że po każdym wykonanym żądaniu licznik czasu jest resetowany i dopóki użytkownik wyśle ​​żądanie w ramach wartości limitu czasu, będzie on nadal uwierzytelniany. Jeśli ustawisz slidingExpiration=false plik cookie uwierzytelniania wygaśnie po value liczbie minut, niezależnie od tego, czy użytkownik wyśle ​​żądanie w ramach limitu czasu, czy nie.

Wartość limitu czasu SessionState określa czas, w jakim dostawca stanu sesji jest wymagany do przechowywania danych w pamięci (lub dowolnej innej pamięci masowej, SQL Server, OutOfProc itp.) Dla określonej sesji. Na przykład, jeśli umieścisz obiekt w Sesji, używając wartości z twojego 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. Wartość Session Timeout jest zawsze resetowana po każdym żądaniu.

+20

Jedno wyjaśnienie: Limit czasu uwierzytelniania formularzy określa czas wygaśnięcia dla [Ticket] (http://msdn.microsoft.com/en-us/ library/system.web.security.formsauthenticationticket.aspx) niekoniecznie w przypadku pliku cookie, w którym można zapisać bilet. Plik cookie może w ogóle nie mieć czasu wygaśnięcia (zmylenie nazywa się ciasteczkiem sesji, co oznacza, że ​​trwa on do momentu zamknięcia przeglądarki) lub może nawet nie być plikiem cookie (uwierzytelnianie formularzy "bez gotowania"). W przypadku trwałego pliku cookie uwierzytelnianie formularzy ustawia czas wygaśnięcia pliku cookie i wygaśnięcie biletu w tym samym czasie. – bmode

+1

, którzy wyczyścić dane sesji z pamięci .... jest to, że silnik IIS lub ASP.Net lub CLR? – Mou

+9

Kolejne wyjaśnienie z MSDN: "Aby zapobiec pogorszeniu wydajności i uniknąć wielu ostrzeżeń przeglądarek dla użytkowników, którzy mają włączone ostrzeżenia dotyczące plików cookie, plik cookie jest aktualizowany po upływie połowy określonego czasu." Tak więc limit czasu ciasteczka jest resetowany tylko wtedy, gdy jest on o połowę niższy. Stąd sugestia, aby ustawić go na 2-krotny limit czasu sesji. – user917170

16

Z tego, co rozumiem, są one niezależne od siebie. Utrzymując limit czasu sesji mniejszy lub równy limitowi czasu uwierzytelniania, można upewnić się, że zmienne sesji specyficzne dla użytkownika nie są zachowywane po upłynięciu limitu czasu uwierzytelniania (jeśli jest to problem, który, jak sądzę, jest normalny, gdy pytam o to pytanie). Oczywiście po wylogowaniu będziesz musiał ręcznie obsłużyć zbieranie zmiennych sesji.

Oto godnej odpowiedzi, które mogą odpowiedzieć na pytanie albo przynajmniej punkt w dobrym kierunku:

5

Różnica polega na tym, że jeden (Timeout formularza) ma związek z uwierzytelnianiem użytkownika, a drugi (limit czasu sesji) ma związek z długością przechowywanych w pamięci podręcznej danych na serwerze. Są więc bardzo niezależnymi rzeczami, więc nie ma się pierwszeństwa nad drugim.

13

slidingExpiration = rzeczywista wartość jest w zasadzie powiedzieć, że po każdym wniosek złożony, zegar zostanie zresetowany i tak długo jak użytkownik wysyła żądanie w wartości limitu czasu, będzie on nadal być uwierzytelnione.

To nie jest poprawne. Limit czasu uwierzytelniania cookie zostanie zresetowany tylko po upływie połowy czasu oczekiwania.

Patrz np https://support.microsoft.com/de-ch/kb/910439/en-us lub https://itworksonmymachine.wordpress.com/2008/07/17/forms-authentication-timeout-vs-session-timeout/

+1

Masz rację. – user917170

2
 <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ę spierać się wcześniejsze odpowiedzi

+1

Może się to zdarzyć, jeśli informacje związane z logowaniem są przechowywane w zmiennych sesji, a po ich usunięciu następuje przekierowanie do loginu. Czy to zależy od kodu? – Steve

Powiązane problemy