2010-02-01 13 views
26

Timeout stan sesji jest ustawiana za pomocą tego elementu web.configRóżnice w formach dopuszczonego limitu czasu sesji i limitu czasu

<sessionState mode="InProc" cookieless="false" timeout="120" /> 

Formularze auth jest konfigurowany za pomocą tego elementu web.config

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" 
      protection="All" 
      timeout="30" 
      name=".ASPXAUTH" 
      path="/" 
      requireSSL="false" 
      slidingExpiration="true" 
      defaultUrl="default.aspx" 
      cookieless="UseDeviceProfile" 
      enableCrossAppRedirects="false" /> 
    </authentication> 
</system.web> 

Co jest różnica między limitami czasu określonymi w każdym z tych elementów? Jeśli oba są różne, jak by to działało?

Odpowiedz

57

Sesja rozpoczyna się za każdym razem, gdy nowy użytkownik trafi na witrynę, niezależnie od tego, czy są anonimowi, czy nie. Uwierzytelnianie ma niewiele wspólnego z sesją.

Limit czasu uwierzytelnienia to czas, w którym plik cookie uwierzytelniający jest odpowiedni dla przeglądarki użytkownika. Po wygaśnięciu pliku cookie muszą ponownie uwierzytelnić się, aby uzyskać dostęp do chronionych zasobów w witrynie.

Tak więc, jeśli sesja przekroczyła limit czasu przed ciasteczką uwierzytelniającą - nadal są one uwierzytelniane, ale wszystkie zmienne sesji znikają i mogą powodować błędy na Twojej stronie, jeśli nie jesteś zdyscyplinowany w zakresie sprawdzania zer i innych warunków spowodowanych brakiem sesja.

Jeśli czasy uwierzytelniania przekroczą sesję, wszystkie zmienne sesji nadal będą istniały, ale nie będą mogły uzyskać dostępu do chronionych zasobów, dopóki nie zalogują się ponownie.

+5

Doskonałe wyjaśnienie. Chcę tylko dodać, że istnieje inne ważne ustawienie limitu czasu, które istnieją w IIS na poziomie puli aplikacji. Usługi IIS zrestartują pulę po osiągnięciu określonego czasu bezczynności, aby zwolnić przydzielone zasoby. Powinieneś upewnić się, że limit czasu bezczynności puli jest zawsze większy niż dwa wspomniane powyżej limity czasu, lub otrzymasz błędy niezależnie od tego, do którego ustawiono limit czasu sesji lub formularzy. – learner

+1

Rzeczywiście, doskonałe wyjaśnienie. Podobnie jak @learner, chcę wspomnieć o innym ustawieniu oprócz [okresu bezczynności] (http://technet.microsoft.com/nl-nl/library/cc771956%28v=ws.10%29.aspx): [ Recykling procesu roboczego] (http://msdn.microsoft.com/en-us/library/aa720473%28v=vs.71%29.aspx). Domyślnie zdarza się to po 29 godzinach i nie jest to wygaśnięcie poślizgu. Jeśli tryb stanu sesji jest [w trakcie] (http://msdn.microsoft.com/en-us/library/ms178586%28v=vs.100%29.aspx), sesje zostaną usunięte po wystąpieniu recyklingu. –

1

zgodnie z oczekiwaniami.

np. jeśli twoja sesja wygasa po 20 minutach, twoje zmienne sesji zostaną utracone. , ale użytkownik może uzyskać dostęp do stron chronionych przez uwierzytelnianie.

Jeśli upłynie limit czasu uwierzytelnienia, użytkownik nie może uzyskać dostępu do strony, którą chroni, a stan sesji nie ma znaczenia.

-3

Wartość limitu czasu sesji musi być mniejsza niż wartość limitu czasu FormsAuthentication. Ponieważ sesja może zostać usunięta z jakiegoś powodu, a scenariusz nie zadziała.

Jeśli przekroczono limit czasu sesji, sprawdź bilet FormsAuthentication. Jeśli bilet jest ważny i nie ma limitu czasu, ponownie wygeneruj sesję na stronie logowania (zdefiniowanej w pliku web.config jako parametr LoginUrl ustawień FormsAuthentication).

Jeśli upłynie czas FormsAuthentication, ASP.NET FormsAuthentication przekieruje użytkownika automatycznie na stronę logowania i użytkownik musi się ponownie zalogować.

Nie zapominaj, że funkcja FormsAuthentication automatycznie przekierowuje użytkownika do strony logowania po przekroczeniu limitu czasu.

Właściwie wolę tę strukturę:

  1. Create a BasePage.cs do logowania wymagane stronach.
  2. na stronie PageInit w BasePage.cs sprawdź sesję. Jeśli sesja wygasła; przekierować użytkownika na stronę logowania.

    if (Session ["UserId"] == null) Response.Redirect ("Login.aspx", true);

  3. Przy Page_Load w Login.aspx sprawdź poprawnie czasy sesji i formularzy.

    //User already have a session; redirect user to homepage. 
        if (SessionHandler.UserId != 0) 
         Response.Redirect("HomePage.aspx"); 
        else 
        { 
         //Session is killed; check Ticket is Valid or not 
         if (Context.User.Identity != null && Context.User.Identity.IsAuthenticated) 
         { 
          //Use Value of the FormsAuthentication 
          var customDataToCheck = Context.User.Identity.Name; 
    
          //Use value to check user is exist really and check db for user's session 
          var user = CheckUserData(customDataToCheck); 
          if (user != null) 
          { 
           //Start Session here 
           SessionHandler.StartSession(user); 
    
           //Redirect user to page what you want. 
           Response.Redirect("HomePage.aspx?ref=regenerated_session"); 
          }      
         } 
        } 
    
  4. przy użyciu Login.aspx Formularze Uwierzytelnienie do tworzenia plików cookie.

    if (nazwa == „tester” & & hasło == „testpassword”) { // dane użytkownika zostaną zapisane w pliku cookie, przechowywania danych użytkownika, który można sprawdzić użytkownik jest ważny lub nie (na przykład Nazwa użytkownika lub ID użytkownika).
    System.Web.Security.FormsAuthentication.SetAuthCookie ("testUserData", keepMeSignedInCheckBox.Checked); Response.Redirect ("HomePage.aspx"); }

Powiązane problemy