Verhindern des Ablaufs der FormsAuthentication-Ablaufzeit

9

Ich habe eine relativ einfache WebForms-basierte Website, die die Formularauthentifizierung verwendet:

%Vor%

Da dies nicht explizit erwähnt wird, ist slidingExpiration standardmäßig auf "true" gesetzt, und daher wird ein Benutzer nicht abgemeldet, solange er sich noch auf der Site bewegt.

Allerdings möchte ich, dass eine bestimmte Seite nicht die Ablaufzeit erhöht. Ist das möglich, entweder in web.config oder im Code? Die einzigen Vorschläge, die ich gesehen habe, erwähnen die Einstellung von slidingExpiration auf false , was sich auf die ganze Seite bezieht.

Der Authentifizierungscookie wird mithilfe von:

festgelegt %Vor%

und daher ist die Änderung des Authentifizierungs-Cookies selbst nicht praktikabel.

    
Adrian Wragg 10.11.2015, 14:37
quelle

3 Antworten

3

Das gleitende Ablaufdatum wird durch das Modul FormsAuthentication erreicht, indem das Cookie bei Bedarf erneut ausgegeben wird. Um das Verschieben zu verhindern, müssen Sie die Cookie-Erneuerung verhindern.

Dies kann durch einfaches Entfernen des FormsAuthentication -Cookies aus der Antwort erfolgen.

Unten ist der Code hinter einem sehr einfachen Webformular. Die Seite aspx hat eine div , die die Ausgabe des Page_Load -Ereignisses anzeigt.

%Vor%

Das Page_Prerender -Ereignis entfernt den FormsAuthentication -Cookie aus der Antwort, wenn sie vorhanden ist, und verhindert dadurch das Verschieben.

Ich habe das getestet, indem ich das Timeout für FormsAuthentication auf zwei Minuten gesetzt habe. Dann starte ich debuggen und logge mich ein. Dann aktualisiere ich die fragliche Seite.

Da FormsAuthentication das Cookie erst aktualisiert, wenn die Hälfte der Ablaufzeit verstrichen ist, passiert in der ersten Minute, dass die Seite denselben verschlüsselten Cookie und dieselbe Ablaufzeit anzeigt. Nach etwas mehr als einer Minute meldet die Seite, dass FormsAuthentication versucht, den Cookie zu erneuern. Aber das Page_Prerender entfernt das Cookie, so dass es nicht gesendet wird. Nach einer weiteren Minute werden Sie zur Anmeldeseite weitergeleitet.

Das Testen derselben, aber das Entfernen der Methode Page_Prerender zeigt, dass der Cookie geändert und die Ablaufzeit nach etwa einer Minute aktualisiert wird.

    
user1429080 18.11.2015, 13:47
quelle
0

Sie können das Ablaufdatum des Response-Cookies auf das Ablaufdatum des Anfrage-Cookies setzen und damit effektiv überschreiben, was das System für diese bestimmte Seite tut.

    
mgiesa 14.11.2015 01:48
quelle
0

Nach einigem Nachdenken habe ich von dem Versuch abgewichen, den Cookie zu ändern oder einen zweiten Cookie zu erstellen oder den Cookie durch Ändern des Session.Timeouts außer Kraft zu setzen. Ich denke, es könnte tatsächlich einfacher sein, einen Timer zu verwenden, der System.Timers verwendet. Die Methoden für den Timer können jederzeit in eine separate Klasse eingefügt werden.

%Vor%

Bearbeiten

Oder verwenden eine Methode, mit der der Benutzer protokolliert wird. In jedem Fall werden Sie die Sitzung beenden, ohne sich für die Dauer der restlichen Website mit der Authentifizierung des Benutzers herumärgern zu müssen, außer um sie zu beenden, wenn die Sitzung auf dieser bestimmten Seite abbricht.

%Vor%

Wie Sie die Sitzung beenden, bleibt Ihnen überlassen. Auf diese Weise können Sie das Problem des gleitenden Ablaufs außer Kraft setzen und ein benutzerdefiniertes Zeitlimit nur innerhalb einer Seite festlegen.

    
Yvette Colomb 14.11.2015 08:09
quelle