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.
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.
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.
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.
Tags und Links asp.net webforms forms-authentication