Jak ustawić limit czasu sesji w web.config


179

Bardzo się starałem, ale nie mogę znaleźć rozwiązania, jak ustawić wartość limitu czasu sesji dla sesji w trakcie dla aplikacji internetowej ASP.Net.

Używam VSTS 2008 + .Net 3.5 + C #. Oto, co napisałem sam, aby ustawić limit czasu na 1 minutę, czy to prawda?

Napisałem w sekcji system.web w web.config

<sessionState timeout="1" mode="InProc" />

5
Sposób definiowania limitu czasu jest poprawny. Czy masz z tym jakieś problemy?
Darin Dimitrov

7
Wiesz, że to oznacza, że ​​wygaśnie po 1 minucie bezczynności, a nie po 1 minucie od jego uruchomienia? Domyślam się, że jeśli zadajesz to pytanie i poprawnie wpisałeś limit czasu, możesz zostać wprowadzony w błąd co do tego, jak to działa.
Ivan Zlatanov

1
Muszę ustawić nieaktywny czas, właśnie tego potrzebuję. Dzięki Ivan!
George 2

LOL! Nie polecałbym ustawiania limitu czasu na 1 minutę. To zabije użyteczność!
Brian McCarthy

3
Całkowicie rozumiem potrzebę krótkiego limitu czasu. W moim przypadku jest to sprawdzenie użyteczności witryny, czy sesja wygasa i jak reaguje, gdy użytkownik wróci. Trudno to przetestować, jednocześnie debugując, chyba że limit czasu sesji nastąpi szybko
Brett Weber

Odpowiedzi:


323

Jeśli chcesz ustawić limit czasu na 20 minut, użyj czegoś takiego:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>

16
20 minut czy godzin? (limit czasu = „20”)
Muhammad Awais

21
Konfiguracja podaje limit czasu w minutach, czyli 20 minut
Wolfwyrd

50

Wartość ustawiana w timeoutatrybucie jest jednym z poprawnych sposobów ustawiania wartości limitu czasu sesji.

W timeoutOkreśla atrybut liczba minut sesja może być bezczynny, zanim zostanie porzucona. Domyślna wartość tego atrybutu to 20.

Przypisując wartość 1 do tego atrybutu, ustawiłeś sesję tak, aby została porzucona w 1 minutę po jej bezczynności.

Aby to przetestować, utwórz prostą stronę aspx i napisz ten kod w zdarzeniu Page_Load,

Response.Write(Session.SessionID);

Otwórz przeglądarkę i przejdź do tej strony. Zostanie wydrukowany identyfikator sesji. Poczekaj minutę, a następnie naciśnij przycisk odświeżania. Identyfikator sesji ulegnie zmianie.

Teraz, jeśli moje przypuszczenie jest poprawne, chcesz, aby użytkownicy wylogowali się, gdy tylko sesja wygaśnie. Aby to zrobić, możesz skonfigurować stronę logowania, która zweryfikuje poświadczenia użytkownika i utworzy zmienną sesji, taką jak ta -

Session["UserId"] = 1;

Teraz będziesz musiał sprawdzić na każdej stronie tę zmienną w ten sposób -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

To jest prosty przykład tego, jak to działa.

Aby jednak tworzyć bezpieczne aplikacje o jakości produkcyjnej, użyj klas ról i członkostwa dostarczonych przez ASP.NET. Zapewniają uwierzytelnianie oparte na formularzach, które jest znacznie bardziej niezawodne niż normalne uwierzytelnianie oparte na sesji, którego próbujesz użyć.


Świetna rada ... Upewnij się, że ustawiłeś zmienną Session przed testowaniem za pomocą Response.Write (Session.SessionID); w przeciwnym razie będzie odświeżał się z nowym identyfikatorem przy każdym odświeżaniu.
Chris Catignani,

1

Jeśli używasz MVC, umieść go w pliku web.config w katalogu głównym aplikacji internetowej, a nie w pliku web.config w katalogu Views. Musi również znajdować się W węźle system.web, a nie pod jak George2 stwierdził w swoim pytaniu: „Napisałem w sekcji system.web w web.config”

Wartość parametru limitu czasu reprezentuje minuty.

Istnieją inne atrybuty, które można ustawić w elemencie sessionState. Informacje można znaleźć tutaj: docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

Możesz wtedy złapać początek nowej sesji w pliku Global.asax, dodając następującą metodę:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}

0

Użyj tego w web.config:

<sessionState 

  timeout="20" 
/>

30
Nie potrzebujesz większości atrybutów, które wymieniasz, po prostu timeoutnaprawdę. stateConnectionStringi sqlConnectionStringsą ignorowane kiedy mode="InProc", a wartości modei cookielesssą ustawiane na wartości domyślne. Więc to naprawdę sprowadza się do odpowiedzi Wolfwyrda.
arcain

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.