Zeitlimit für Formularauthentifizierung im Vergleich zum Sitzungszeitlimit für Sitzungsstatus

139

Ich habe Code, den ich in Bezug auf Sitzungszeitüberschreitungen auf der Website durchschaue. In der web.config bin ich auf diesen Code gestoßen.

 <authentication mode="Forms">
  <forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" />
</authentication>

<sessionState timeout="30" />

Weiß jemand, ob einer Vorrang vor dem anderen hat und wie sie sich unterscheiden? Vielen Dank.

Glücklicher Luke2
quelle
Mögliches Duplikat von Forms Authentication Timeout vs Session Timeout
Hüseyin Yağlı

Antworten:

226

Sie sind verschiedene Dinge. Der Wert für das Formularauthentifizierungszeitlimit legt fest, wie lange das Authentifizierungscookie in Minuten gültig sein soll. Dies bedeutet, dass valuedas Cookie nach der Anzahl der Minuten abläuft und der Benutzer nicht mehr authentifiziert wird. Er wird zum Login umgeleitet Seite automatisch. Der slidingExpiration=trueWert besagt im Wesentlichen, dass der Benutzer, solange er innerhalb des Zeitlimitwerts eine Anfrage stellt, weiterhin authentifiziert wird (weitere Details hier ). Wenn Sie slidingExpiration=falsedas Authentifizierungscookie festlegen , läuft es nach der valueAnzahl der Minuten ab, unabhängig davon, ob der Benutzer innerhalb des Zeitlimitwerts eine Anforderung stellt oder nicht.

Der SessionStateZeitlimitwert legt fest, wie lange ein Sitzungsstatusanbieter benötigt, um Daten für eine bestimmte Sitzung im Speicher (oder in dem verwendeten Sicherungsspeicher, SQL Server, OutOfProc usw.) zu speichern. Wenn Sie beispielsweise ein Objekt mit dem Wert in Ihrem Beispiel in die Sitzung einfügen, werden diese Daten nach 30 Minuten entfernt. Der Benutzer ist möglicherweise noch authentifiziert, die Daten in der Sitzung sind jedoch möglicherweise nicht mehr vorhanden. Der Session TimeoutWert wird nach jeder Anfrage immer zurückgesetzt.

Ikarus
quelle
26
Eine Klarstellung: Das Zeitlimit für die Formularauthentifizierung legt die Ablaufzeit für das Ticket fest, nicht unbedingt für das Cookie, in dem das Ticket gespeichert werden kann. Das Cookie hat möglicherweise überhaupt keine Ablaufzeit (verwirrenderweise als Sitzungscookie bezeichnet, was bedeutet, dass es so lange dauert, bis der Benutzer den Browser schließt), oder es gibt möglicherweise überhaupt kein Cookie ("cookieless" bildet die Authentifizierung). Bei einem dauerhaften Cookie setzt die Formularauthentifizierung den Cookie-Ablauf und den Ticketablauf auf dieselbe Zeit.
Bmode
13
Eine weitere Klarstellung von MSDN: "Um Leistungseinbußen zu vermeiden und um mehrere Browserwarnungen für Benutzer zu vermeiden, bei denen Cookie-Warnungen aktiviert sind, wird das Cookie aktualisiert, wenn mehr als die Hälfte der angegebenen Zeit verstrichen ist." Das Cookie-Timeout wird also nur zurückgesetzt, wenn es halb vorbei ist. Daher der Vorschlag, das Sitzungszeitlimit auf das Zweifache zu setzen.
user917170
21

Der Wert slidingExpiration = true besagt im Wesentlichen, dass der Timer nach jeder gestellten Anforderung zurückgesetzt wird. Solange der Benutzer eine Anforderung innerhalb des Timeout-Werts stellt, wird er weiterhin authentifiziert.

Das ist nicht richtig. Das Zeitlimit für Authentifizierungscookies wird nur zurückgesetzt, wenn die Hälfte der Zeit des Zeitlimits abgelaufen ist.

Siehe zum Beispiel https://support.microsoft.com/de-ch/kb/910439/en-us oder https://itworksonmymachine.wordpress.com/2008/07/17/forms-authentication-timeout-vs-session -Auszeit/

Silvan Hofer
quelle
18

Soweit ich weiß, sind sie unabhängig voneinander. Indem Sie das Sitzungszeitlimit kleiner oder gleich dem Authentifizierungszeitlimit halten, können Sie sicherstellen, dass benutzerspezifische Sitzungsvariablen nach dem Zeitlimit für die Authentifizierung nicht beibehalten werden (wenn dies Ihr Anliegen ist, was meiner Meinung nach das normale ist, wenn Sie dies fragen Frage). Natürlich müssen Sie die Entsorgung von Sitzungsvariablen beim Abmelden manuell vornehmen.

Hier ist eine anständige Antwort, die Ihre Frage beantworten oder Sie zumindest in die richtige Richtung weisen kann:

Schief
quelle
7

Der Unterschied besteht darin, dass einer (Forms Timeout) mit der Authentifizierung des Benutzers und der andere (Session Timeout) damit zu tun hat, wie lange zwischengespeicherte Daten auf dem Server gespeichert sind. Sie sind also sehr unabhängige Dinge, so dass eines nicht Vorrang vor dem anderen hat.

Karl Anderson
quelle
5
      <sessionState timeout="2" />
      <authentication mode="Forms">
          <forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
      </authentication>

Diese Konfiguration schickt mich alle zwei Minuten zur Anmeldeseite, was den früheren Antworten zu widersprechen scheint

shlasasha
quelle
1
Dies kann passieren, wenn Anmeldeinformationen in Sitzungsvariablen gespeichert werden und wenn diese gelöscht werden, werden sie zur Anmeldung umgeleitet. Es kommt also auf den Code an?
Steve
0

Wenn Sie über diese Frage stolpern, lesen Sie diese Dokumentation von MS - sie enthält wirklich gute Details zur Einstellung des FormsAuthentication-Zeitlimits.

In diesem Dokument wird ausführlich erläutert, welchen Kommentar bmode in der akzeptierten Antwort macht - zum dauerhaften Cookie (Sitzung vs läuft ab)

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-security/introduction/forms-authentication-configuration-and-advanced-topics-cs#specifying-the-tickets- Timeout-Wert

Naren
quelle