So legen Sie das Sitzungszeitlimit in web.config fest

177

Ich habe mich sehr bemüht, kann jedoch keine Lösung finden, wie der Wert für das Sitzungszeitlimit für eine In-Process-Sitzung für eine ASP.Net-Webanwendung festgelegt wird.

Ich verwende VSTS 2008 + .Net 3.5 + C #. Folgendes habe ich selbst geschrieben, um das Timeout auf 1 Minute festzulegen. Ist es richtig?

Ich habe unter system.web im Abschnitt geschrieben web.config

<sessionState timeout="1" mode="InProc" />
George2
quelle
5
Die Art und Weise, wie Sie das Zeitlimit definieren, ist korrekt. Hast du irgendwelche Probleme damit?
Darin Dimitrov
7
Sie wissen, dass dies bedeutet, dass es nach 1 Minute Inaktivität abläuft und nicht nach 1 Minute nach dem Start? Ich vermute, wenn Sie diese Frage stellen und das Zeitlimit richtig eingegeben haben, werden Sie möglicherweise irregeführt, wie es funktioniert.
Ivan Zlatanov
1
Ich muss inaktive Zeit einstellen, es ist genau das, was ich brauche. Danke Ivan!
George2
LOL! Ich würde nicht empfehlen, das Timeout auf nur 1 Minute einzustellen. Das wird die Benutzerfreundlichkeit zerstören!
Brian McCarthy
3
Ich verstehe die Notwendigkeit einer kurzen Auszeit vollständig. In meinem Fall soll die Benutzerfreundlichkeit der Site getestet werden, wenn die Sitzung eine Zeitüberschreitung aufweist und wie sie reagiert, sobald der Benutzer zurückkommt. Es ist schwer, dies zu testen, während gleichzeitig debuggt wird, es sei denn, das Sitzungszeitlimit tritt schnell auf
Brett Weber

Antworten:

323

Wenn Sie das Zeitlimit auf 20 Minuten einstellen möchten, verwenden Sie Folgendes:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>
Wolfwyrd
quelle
16
20 Minuten oder Stunden? (timeout = "20")
Muhammad Awais
21
Config gibt das Timeout in Minuten an, also 20 Minuten
Wolfwyrd
49

Der Wert, den Sie im timeoutAttribut festlegen, ist eine der richtigen Methoden zum Festlegen des Sitzungszeitlimitwerts.

Das timeoutAttribut gibt an, wie viele Minuten eine Sitzung inaktiv sein kann, bevor sie abgebrochen wird. Der Standardwert für dieses Attribut ist 20.

Indem Sie diesem Attribut den Wert 1 zuweisen, haben Sie festgelegt, dass die Sitzung 1 Minute nach ihrem Leerlauf abgebrochen wird.

Um dies zu testen, erstellen Sie eine einfache Aspx-Seite und schreiben Sie diesen Code in das Ereignis Page Load.

Response.Write(Session.SessionID);

Öffnen Sie einen Browser und gehen Sie zu dieser Seite. Eine Sitzungs-ID wird gedruckt. Warten Sie eine Minute und klicken Sie dann auf Aktualisieren. Die Sitzungs-ID ändert sich.

Wenn meine Vermutung richtig ist, möchten Sie Ihre Benutzer dazu bringen, sich abzumelden, sobald die Sitzung abgelaufen ist. Zu diesem Zweck können Sie eine Anmeldeseite einrichten, auf der die Benutzeranmeldeinformationen überprüft werden, und eine Sitzungsvariable wie die folgende erstellen:

Session["UserId"] = 1;

Jetzt müssen Sie auf jeder Seite eine Überprüfung für diese Variable wie folgt durchführen:

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

Dies ist ein Beispiel dafür, wie dies funktionieren wird.

Verwenden Sie jedoch Rollen- und Mitgliedschaftsklassen , die von ASP.NET bereitgestellt werden, um sichere Apps für Ihre Produktionsqualität zu erstellen. Sie bieten eine formularbasierte Authentifizierung, die viel zuverlässiger ist als die normale sitzungsbasierte Authentifizierung, die Sie verwenden möchten.

Kirtan
quelle
Gute Ratschläge ... Stellen Sie sicher, dass Sie zuerst eine Sitzungsvariable festlegen, bevor Sie mit Response.Write (Session.SessionID) testen. Andernfalls wird es bei jeder Aktualisierung mit einer neuen ID aktualisiert.
Chris Catignani
1

Wenn Sie MVC verwenden, legen Sie dies in der Datei web.config im Stammverzeichnis der Webanwendung ab, nicht in der Datei web.config im Verzeichnis Views. Es muss sich auch im Knoten system.web befinden, nicht unter George2 in seiner Frage: "Ich habe unter system.web in der Datei web.config geschrieben."

Der Timeout-Parameterwert repräsentiert Minuten.

Es gibt andere Attribute, die im sessionState-Element festgelegt werden können. Informationen finden Sie hier: docs.microsoft.com sessionState

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

Sie können dann den Beginn einer neuen Sitzung in der Datei Global.asax abfangen, indem Sie die folgende Methode hinzufügen:

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

Verwenden Sie dies in web.config:

<sessionState 

  timeout="20" 
/>
Balaji Birajdar
quelle
30
Sie brauchen die meisten Attribute, die Sie auflisten, nicht timeoutwirklich. stateConnectionStringund sqlConnectionStringwerden ignoriert, wenn mode="InProc"und die Werte für modeund cookielessauf ihre Standardwerte gesetzt werden. Das führt also wirklich zu Wolfwyrds Antwort.
Arcain
0

Wenn es nicht funktioniert web.config, müssen Sie es über IIS festlegen.

asif jan
quelle