Ist die ASP.Net Inproc session-timeout zurückgesetzt, wenn die SessionID wird auf Sie zugegriffen?
-
05-07-2019 - |
Frage
Ich lese hier dass ein inproc asp.net session-zurücksetzen timeout jedesmal, wenn auf diese zugegriffen wird (Lesen oder schreiben).Meine Frage ist, wenn der timeout auch zurücksetzen, wenn ich lese nur die sessionID?
Beispiel:Session-timeout wird festgelegt, bis zu 20 min.Nach 15 min.Inaktivität lade ich eine Seite auf und Lesen Sie die Sitzung.SessionID.Wird die Sitzung noch vorhanden, nach 10 min.?
Und noch eine Frage:Spielt es eine Rolle, wenn die Seite geladen wird, die direkt oder Zugriffe über AJAX?
Lösung
Es scheint mir, dass Sie mischen zwei verschiedene Dinge:Lesen eines Wertes aus den Session-Zustand (in code) unterscheidet sich von der Befestigung eine Instanz von SessionState, um die aktuelle Anfrage zu verwenden.
Wenn ich mich nicht sehr Irre, wird der timeout-Wert nicht aktualisiert, wenn Sie access ein Session-Objekt (auch im code), sondern es wird aktualisiert, wenn eine neue Anfrage serviert.Dies geschieht, weil das SessionState-Eintrag ist selbst zum Cache Hinzugefügt (und das Ablaufdatum der Richtlinie festgelegt)
Also, um deine Frage zu beantworten:Der timeout wird nicht zurückgesetzt werden.
Nochmal das Beispiel, das Sie gab:Das Zeitlimit zurückgesetzt werden auf die laden von der Seite, sondern wenn Sie Lesen Sie die Sitzungs-id im code.
Andere Tipps
Zugriff auf SessionID nicht Session-Timeout auswirken. Wenn Sie einen Blick mit Reflektor nehmen, die Sitzungs-Eigenschaft (implementiert in HttpSessionStateContainer) sieht wie folgt aus:
public string SessionID
{
get
{
if (this._id == null)
{
this._id = this._stateModule.DelayedGetSessionId();
}
return this._id;
}
}
, die nicht die zugrunde liegenden gespeicherten Elemente nicht berührt.
Auch auf dieser Ebene ist es egal, wo die Anfrage kam von (Ajax / normal).