Sitzungszeitlimit in ASP.NET

163

Ich führe eine ASP.NET 2.0-Anwendung in IIS 6.0 aus. Ich möchte, dass das Sitzungszeitlimit 60 Minuten beträgt und nicht die Standardzeit von 20 Minuten. Ich habe folgendes getan

  1. Setzen Sie <sessionState timeout="60"></sessionState> ein web.config.
  2. Legen Sie das Sitzungszeitlimit in den Konfigurationseinstellungen von IIS-Manager / Website-Eigenschaften / ASP.NET auf 60 Minuten fest.
  3. Stellen Sie das Leerlaufzeitlimit in den Eigenschaften / der Leistung des Anwendungspools auf 60 Minuten ein.

Ich bekomme immer noch ein Sitzungszeitlimit von 20 Minuten. Muss ich noch etwas tun?

klone
quelle
1
Bitte geben Sie an, wie Sie die 20 Minuten gemessen haben. Stellen wir sicher, dass die 20 Minuten ein Sitzungszeitlimit sind und keine andere.
John Saunders
11
Bitte markieren Sie Qualitätsantworten als akzeptiert, indem Sie das Häkchen in der Nähe der Aufwärts- / Abwärtspfeile verwenden
Brian Webster
3
Acht Jahre später wird die richtige Antwort immer noch nicht akzeptiert.
Nathan
Bitte klären Sie, was Sie unter IIS-Manager / Website-Eigenschaften / ASP.NET-Konfigurationseinstellungen verstehen. Was haben Sie Schritt für Schritt in IIS geändert?
Niico

Antworten:

275

Verwenden Sie die Formularauthentifizierung?

Die Formularauthentifizierung verwendet einen eigenen Wert für das Zeitlimit (standardmäßig 30 Minuten). Ein Zeitlimit für die Formularauthentifizierung sendet den Benutzer zur Anmeldeseite, während die Sitzung noch aktiv ist. Dies sieht möglicherweise so aus, wie sich Ihre App verhält, wenn die Sitzung abläuft, sodass Sie sich leicht miteinander verwechseln können.

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

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

Durch Festlegen des Formularzeitlimits auf etwas weniger als das Sitzungszeitlimit kann der Benutzer ein Fenster erhalten, in dem er sich erneut anmelden kann, ohne Sitzungsdaten zu verlieren.

HectorMac
quelle
@Unbreakable In Minuten.
Word Rearranger
43

Ich weiß nichts über web.config oder IIS. Aber ich glaube, dass Sie es mit C # -Code so machen können

Session.Timeout = 60; // 60 is number of minutes
Dmitris
quelle
21
Wird dadurch nur das Zeitlimit der aktuellen Sitzung angepasst? Oder wird dadurch das Zeitlimit für die gesamte Anwendung angepasst?
Johncl
2
Nichts in der Dokumentation weist darauf hin, dass sich die Einstellung von der Session.TimeoutVerwendung von web.config oder IIS unterscheidet. Ich gehe daher davon aus, dass dies für die gesamte Anwendung gilt.
Drasive
Ich denke, @Drasive hat Recht, aber es muss mindestens durch 2 getrennte verbundene Client-zu-Server bewiesen werden und das Zeitlimit für Leerlaufsitzungen überprüfen.
QMaster
42

Verwenden Sie den folgenden Codeblock in Ihrer Datei web.config. Hier beträgt das Standard-Sitzungszeitlimit 80 Minuten.

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

Verwenden Sie den folgenden Link für das Sitzungszeitlimit mit der Popup-Warnmeldung.

Beispiel für ein Sitzungszeitlimit

Zu Ihrer Information: Die obigen Beispiele werden mit dem Devexpress-Popup-Steuerelement erstellt, sodass Sie das Devexpress-Popup-Steuerelement anpassen / durch das normale Popup-Steuerelement ersetzen müssen. Wenn Sie devexpress verwenden, müssen Sie keine Anpassungen vornehmen

Rama Subba Reddy M.
quelle
kochlos falsch?
Kiquenet
3
@Kiquenet, wenn Sie cookieless auf true setzen, wird Ihre sessionId in eine URL eingebettet, was ein hohes Sicherheitsrisiko darstellt. ASP.NET Framework fügt eine eindeutige ID in die URL ein. Sie können dies überprüfen, indem Sie das Cookie deaktivieren oder das Attribut cookieless wie oben auf true setzen. Laut MSDN wird der SessionID-Wert standardmäßig in einem nicht ablaufenden Sitzungscookie im Browser gespeichert. Wenn Sie jedoch cookieless = "true" angeben, behält ASP.NET den Sitzungsstatus ohne Cookiel bei, indem automatisch eine eindeutige Sitzungs-ID in die URL der Seite eingefügt wird .
Hamza Khanzada
8

Haben Sie etwas in machine.config, das möglicherweise wirksam wird? Das Festlegen des Sitzungszeitlimits in web.config sollte alle Einstellungen in IIS oder machine.config überschreiben. Wenn Sie jedoch eine web.config-Datei irgendwo in einem Unterordner in Ihrer Anwendung haben, überschreibt diese Einstellung die im Stammverzeichnis Ihrer Anwendung.

Wenn ich mich richtig erinnere, wirkt sich das Zeitlimit in IIS nur auf ASP-Seiten aus, nicht auf ASPX. Sind Sie sicher, dass Ihr Sitzungscode in web.config korrekt ist? Es sollte ungefähr so ​​aussehen:

<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ᴏʀᴏʀ
quelle
8

In meiner Situation war es Application Pool. Es wird so eingestellt, dass es im Leerlauf für xx Minuten neu gestartet wird. Wenn ich es so einstelle, dass es nicht neu startet, scheint es den Wert von Web Config zu verwenden.

Lyords
quelle
Ich weiß, wir sind 2020, aber verdammt, das hat mein Problem gelöst, danke!
Binary9
8

Das ist normalerweise alles, was Sie tun müssen ...

Sind Sie sicher, dass der Grund dafür, dass die Sitzung nach 20 Minuten verloren geht, darin besteht, dass Sie untätig sind ...

Es gibt viele Gründe, warum die Sitzung möglicherweise gelöscht wird. Sie können die Ereignisprotokollierung für IIS aktivieren und dann in der Ereignisanzeige die Gründe für das Löschen der Sitzung anzeigen. Möglicherweise haben Sie andere Gründe dafür?

Sie können auch die Dokumentation für Ereignismeldungen und die zugehörige Ereignistabelle lesen .

Davidsleeps
quelle
3

Wenn Sie die Authentifizierung verwenden, empfehle ich, Folgendes in die Datei web.config aufzunehmen.

In meinem Fall werden Benutzer nach Ablauf der Zeit auf die Anmeldeseite umgeleitet:

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>
Amar Beeharry Panray
quelle
Ich habe hier <authentication mode = "Forms"> einen Fehler erhalten, nachdem ich ihn in web.config
Lst Patrick
2

Seit ASP.Net Core 1.0 (vNext oder welcher Name auch immer dafür verwendet wird) werden Sitzungen unterschiedlich implementiert. Ich habe den Wert für das Sitzungszeitlimit in geändert Startup.cs, void ConfigureServicesindem ich Folgendes verwendet habe:

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

Oder wenn Sie die appsettings.jsonDatei verwenden möchten , können Sie Folgendes tun:

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

// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));
Matty
quelle
2

Sie finden die Einstellung hier in IIS:

die Einstellungen

Es kann auf Server-, Website- oder App-Ebene unter "ASP" gefunden werden.

Ich denke, Sie können es hier auf der Ebene web.config einstellen. Bitte bestätigen Sie dies selbst.

<configuration>
   <system.web>

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

   </system.web>
</configuration>
Christian Findlay
quelle
Auch in Global.asax?
Kiquenet
1

Der Zeitlimitwert für IIS-Sitzungen gilt nur für klassische ASP-Anwendungen. Dies wird in der IIS-Konfiguration gesteuert. In Ihrem Fall Für ASP.NET-Apps gilt nur der von web.config angegebene Zeitlimitwert.

Carlos E.
quelle
Was ist mit dem Timeout des App-Pools von IIS?
SteveCav
1

Das Standard-Sitzungszeitlimit ist in IIS auf 20 Minuten festgelegt

Befolgen Sie die nachstehenden Verfahren für jede im IIS 8.5-Web gehostete Site

IIS Timeout-Konfiguration

Öffnen Sie den IIS 8.5-Manager.

Klicken Sie auf den Site-Namen.

Wählen Sie "Konfigurationseditor" im Abschnitt "Verwaltung".

Suchen Sie in der Dropdown-Liste "Abschnitt:" oben im Konfigurationseditor nach "system.web / sessionState".

Stellen Sie das "Timeout" auf "00:20:00 oder weniger" ein und verwenden Sie dabei den niedrigsten Wert, der je nach Anwendung möglich ist. Zulässige Werte sind 5 Minuten für Anwendungen mit hohem Wert, 10 Minuten für Anwendungen mit mittlerem Wert und 20 Minuten für Anwendungen mit niedrigem Wert -Wert-Anwendungen.

Klicken Sie im Bereich "Aktionen" auf "Übernehmen".

Guicb
quelle
0

Wenn Sie ein Sitzungszeitlimit für die Website wünschen, entfernen Sie es

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

Tag aus der Datei web.config.

Nayan Hodar
quelle
-1

Die Timeout-Eigenschaft gibt den dem Session-Objekt für die Anwendung zugewiesenen Timeout-Zeitraum in Minuten an. Wenn der Benutzer innerhalb des Zeitlimits keine Seite aktualisiert oder anfordert, wird die Sitzung beendet.

IIS 6.0: Der minimal zulässige Wert beträgt 1 Minute und der maximale Wert 1440 Minuten.

Session.Timeout = 600;
Muhammad Awais
quelle
-2

Starten Sie den IIS nach dem Ändern des Sitzungszeitlimits in IIS neu. Um dies zu erreichen, gehen Sie zur Eingabeaufforderung. Geben Sie IISRESET ein und drücken Sie die Eingabetaste.

Varun R.
quelle
Durch das Bearbeiten der Datei web.config wird IIS automatisch zurückgesetzt.
Timothy Gonzalez