Limit czasu sesji w ASP.NET

163

Używam aplikacji ASP.NET 2.0 w usługach IIS 6.0. Chcę, aby limit czasu sesji wynosił 60 minut, a nie domyślne 20 minut. Zrobiłem co następuje

  1. Ustaw <sessionState timeout="60"></sessionState> w web.config.
  2. Ustaw limit czasu sesji na 60 minut w Menedżerze usług IIS / właściwościach witryny sieci Web / ustawieniach konfiguracji ASP.NET.
  3. Ustaw limit czasu bezczynności na 60 minut we właściwościach / wydajności puli aplikacji.

Nadal otrzymuję limit czasu sesji wynoszący 20 minut. Czy jest coś jeszcze, co muszę zrobić?

klone
źródło
1
Podaj informacje o tym, jak zmierzyłeś te 20 minut. Upewnijmy się, że te 20 minut to limit czasu sesji, a nie jakiś inny.
John Saunders
11
Zaznacz odpowiedzi jakościowe jako zaakceptowane, używając znacznika wyboru obok strzałek „za / przeciw”
Brian Webster,
3
Osiem lat później poprawna odpowiedź nadal nie została zaakceptowana.
Nathan
Wyjaśnij, co rozumiesz przez menedżera usług IIS / właściwości witryny sieci Web / ustawienia konfiguracji ASP.NET. Co krok po kroku zmieniłeś w usługach IIS?
niico

Odpowiedzi:

275

Czy używasz uwierzytelniania za pomocą formularzy?

Uwierzytelnianie za pomocą formularzy używa własnej wartości limitu czasu (domyślnie 30 minut). Po przekroczeniu limitu czasu uwierzytelniania za pomocą formularzy użytkownik zostanie przeniesiony na stronę logowania z aktywną sesją. Może to wyglądać na zachowanie Twojej aplikacji po przekroczeniu limitu czasu sesji, co ułatwia pomylenie jednej z drugą.

<system.web>
    <authentication mode="Forms">
          <forms timeout="50"/>
    </authentication>

    <sessionState timeout="60"  />
</system.web>

Ustawienie limitu czasu formularzy na wartość mniejszą niż limit czasu sesji może dać użytkownikowi okno, w którym może zalogować się ponownie bez utraty danych sesji.

HectorMac
źródło
@ Niezniszczalny w kilka minut.
Zmiana kolejności słów
44

Nie wiem o web.config ani IIS. Ale wierzę, że z kodu C # można to zrobić jak

Session.Timeout = 60; // 60 is number of minutes
Dmitris
źródło
22
Czy spowoduje to jedynie dostosowanie limitu czasu bieżącej sesji? A może to dostosuje limit czasu dla całej aplikacji?
Johncl,
2
Nic w dokumentacji nie wskazuje na to, że ustawienie Session.Timeoutróżni się od używania pliku web.config lub IIS, więc zakładam, że dotyczy to całej aplikacji.
Drasive
Myślę, że @Drasive ma rację, ale musi to zostać udowodnione przez co najmniej 2 oddzielnych klientów podłączonych do serwera i sprawdzić limit czasu bezczynnej sesji.
QMaster
42

Użyj następującego bloku kodu w pliku web.config. Tutaj domyślny limit czasu sesji wynosi 80 minut.

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

Użyj poniższego linku, aby ustawić limit czasu sesji z wyskakującym komunikatem alarmowym.

Przykład limitu czasu sesji

FYI: Powyższe przykłady są wykonane z kontrolką wyskakującą devexpress, więc musisz dostosować / zamienić kontrolę wyskakujących okienek devexpress na normalną kontrolę wyskakujących okienek. Jeśli używasz devexpress, nie musisz dostosowywać

Rama Subba Reddy M
źródło
bez plików cookie fałsz?
Kiquenet,
3
@Kiquenet, jeśli ustawisz bez plików cookie na true, wtedy identyfikator sessionId zostanie osadzony w adresie URL, co stanowi duże zagrożenie bezpieczeństwa. Platforma ASP.NET wstawia unikalny identyfikator do adresu URL, możesz to sprawdzić, wyłączając plik cookie lub ustawiając atrybut bez plików cookie na wartość true, tak jak to zrobiłeś. Zgodnie z MSDN, domyślnie wartość SessionID jest przechowywana w nie wygasającym pliku cookie sesji w przeglądarce, ale jeśli określisz cookieless = "true", wówczas ASP.NET utrzymuje stan sesji bez plików cookie, automatycznie wstawiając unikalny identyfikator sesji do adresu URL strony .
Hamza Khanzada
8

Czy masz w pliku machine.config coś, co mogłoby zacząć obowiązywać? Ustawienie limitu czasu sesji w web.config powinno przesłonić wszelkie ustawienia w usługach IIS lub machine.config, jednak jeśli masz plik web.config gdzieś w podfolderze w aplikacji, to ustawienie zastąpi ustawienie w katalogu głównym aplikacji.

Ponadto, jeśli dobrze pamiętam, limit czasu w usługach IIS dotyczy tylko stron .asp, a nie .aspx. Czy na pewno kod sesji w web.config jest poprawny? Powinien wyglądać mniej więcej tak:

<sessionState
    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    stateNetworkTimeout="60"
    sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
    cookieless="false"
    timeout="60"
/>
Cᴏʀʏ
źródło
8

W mojej sytuacji była to pula aplikacji. Jest ustawiony na ponowne uruchomienie po bezczynności przez xx min. Kiedy ustawię go tak, aby nie uruchamiał się ponownie, wydaje się, że używa wartości z Web Config.

lordy
źródło
Wiem, że mamy rok 2020, ale do cholery, to właśnie rozwiązało mój problem, dzięki!
Binary
8

Zwykle to wszystko, co musisz zrobić ...

Czy jesteś pewien, że po 20 minutach przyczyną utraty sesji jest jednak bezczynność ...

Istnieje wiele powodów, dla których sesja może zostać wyczyszczona. Możesz włączyć rejestrowanie zdarzeń dla usług IIS, a następnie użyć przeglądarki zdarzeń, aby zobaczyć powody, dla których sesja została wyczyszczona ... może się okazać, że dzieje się tak z innych powodów?

Możesz również przeczytać dokumentację dotyczącą komunikatów o zdarzeniach i związanej z nimi tabeli zdarzeń .

davidsleeps
źródło
3

Jeśli korzystasz z uwierzytelniania, polecam dodanie następującego pliku w pliku web.config.

W moim przypadku użytkownicy są przekierowywani na stronę logowania po przekroczeniu limitu czasu:

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>
amar beeharry panray
źródło
Wystąpił błąd tutaj <authentication mode = "Forms"> po umieszczeniu go w web.config
Lst Patrick
2

Ponieważ ASP.Net core 1.0 (vNext lub jakakolwiek inna nazwa jest używana), sesje są implementowane inaczej. Zmieniłem wartość limitu czasu sesji w Startup.cs, void ConfigureServicesużywając:

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

Jeśli chcesz użyć appsettings.jsonpliku, możesz zrobić coś takiego:

// Appsettings.json
"SessionOptions": {
    "IdleTimeout": "00:30:00"
}

// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));
Matty
źródło
2

To ustawienie można znaleźć tutaj w usługach IIS:

Ustawienia

Można go znaleźć na poziomie serwera, witryny internetowej lub aplikacji w sekcji „ASP”.

Myślę, że możesz to ustawić na poziomie web.config tutaj. Potwierdź to dla siebie.

<configuration>
   <system.web>

      <!-- Session Timeout in Minutes (Also in Global.asax) -->
       <sessionState timeout="1440"/>

   </system.web>
</configuration>
Christian Findlay
źródło
Również w Global.asax?
Kiquenet,
1

Wartość limitu czasu sesji usług IIS dotyczy tylko klasycznych aplikacji .asp i jest kontrolowana w konfiguracji usług IIS. W Twoim przypadku W przypadku aplikacji ASP.NET obowiązuje tylko wartość limitu czasu określona w pliku web.config.

Carlos E.
źródło
A co z limitem czasu puli aplikacji usług IIS?
SteveCav
1

Domyślny limit czasu sesji jest zdefiniowany w usługach IIS na 20 minut

Postępuj zgodnie z poniższymi procedurami dla każdej witryny hostowanej w sieci Web usług IIS 8.5

Konfiguracja limitu czasu usług IIS

Otwórz Menedżera usług IIS 8.5.

Kliknij nazwę witryny.

Wybierz „Edytor konfiguracji” w sekcji „Zarządzanie”.

Z listy rozwijanej „Sekcja:” u góry edytora konfiguracji znajdź „system.web / sessionState”.

Ustaw „limit czasu” na „00:20:00 lub mniej”, używając najniższej możliwej wartości w zależności od aplikacji. Dopuszczalne wartości to 5 minut dla aplikacji o dużej wartości, 10 minut dla aplikacji o średniej wartości i 20 minut dla aplikacji o niskiej wartości -wartościowe aplikacje.

W okienku „Działania” kliknij „Zastosuj”.

Guicb
źródło
0

jeśli chcesz, aby limit czasu sesji dla witryny internetowej był usuwany

<authentication mode="Forms">
      <forms timeout="50"/>
</authentication>

tag z pliku web.config.

Nayan Hodar
źródło
-1

Właściwość Timeout określa limit czasu przypisany do obiektu Session dla aplikacji w minutach. Jeśli użytkownik nie odświeży ani nie zażąda strony w określonym czasie, sesja kończy się.

IIS 6.0: Minimalna dozwolona wartość to 1 minuta, a maksymalna to 1440 minut.

Session.Timeout = 600;
Muhammad Awais
źródło
-2

Po zmianie wartości limitu czasu sesji w usługach IIS prosimy o ponowne uruchomienie usług IIS. Aby to osiągnąć, przejdź do wiersza polecenia. Wpisz IISRESET i naciśnij enter.

Varun R
źródło
Edycja pliku web.config automatycznie powoduje zresetowanie usług IIS.
Timothy Gonzalez