2010-11-24 3 views
7

Ich habe eine ASP.NET-Website, die Formularauthentifizierung verwendet. Die Zeitüberschreitung beträgt zwanzig Minuten.Kontrollwerte verloren, wenn Authentifizierungssitzung in ASP.NET abgelaufen ist

Ich habe festgestellt, dass, wenn ein Benutzer ein Formular halb ausfüllt und dann abgelaufen ist, werden sie auf die Anmeldeseite umgeleitet, ausfüllen und zurück zum Formular, aber mit LEEREN Steuerelementen umgeleitet.

Ich hatte vorher angenommen, dass ASP.NET einige Skulduggery verwenden würde, um die Formularsteuerelemente erneut zu füllen, wenn dies geschieht.

Gibt es Änderungen, die ich vornehmen kann, um sicherzustellen, dass es funktioniert?

Antwort

1

Ich denke, die beste Lösung für Ihr Problem ist das slidingExpiration Attribut auf true auf dem Formular Authentifizierung Element in web.config. Auf diese Weise verliert der Benutzer seine Daten nur, wenn sie mehr als 20 Minuten benötigen, um das Formular auszufüllen.

Das Problem tritt auf, weil asp.net "erinnert" Werte, die in dem Formular mithilfe eines Konzepts namens Viewstate eingegeben wurden, die im Grunde nur ein ausgeblendetes Formularfeld ist. Wenn der Server auf die Anmeldeseite umleitet, gehen alle Formularfelder verloren, da eine Weiterleitung keine POST-Daten enthalten kann.

Wenn Sie möchten, dass Ihre Benutzer länger als 20 Minuten brauchen, um das Formular auszufüllen, können Sie über Javascript auf der Seite mit dem Formular nachdenken, das alle x Minuten einen Ajax-Anruf zum Server macht. Mit gleitendem Ablauf wird die Sitzungsablaufzeit jedes Mal zurückgesetzt, wenn der Ajax-Anruf ausgelöst wird, und somit wird niemals Ihren Benutzer ausloggen, solange sie die Seite anzeigen, die das Formular enthält.

+0

Ich verstehe, dass es auch so etwas wie Cross-Page-Posting gibt. Ich dachte, das hätte ein guter Standardmechanismus sein können, damit der Ansichtszustand von der Originalseite über die Anmeldeseite und wieder zurück zur Originalseite erhalten bleibt. Aber leider nein! – David

+0

Danke für die Antwort übrigens, es ist, was ich gesucht habe. Ich bin nicht scharf auf die Idee, das Timeout der Authentifizierung effektiv zu deaktivieren. Ich muss darüber nachdenken. – David

0

Sie können den Inhalt jedes Steuerelements dynamisch in Session speichern, sobald es ausgefüllt wird, indem Sie dem onChange-Ereignis einen AJAX-ähnlichen WebMethod anhängen.

Mit dieser Methode würde die Sitzung nicht ablaufen, solange der Benutzer fleißig alle 20 Minuten mindestens ein Steuerelement ausfüllt.

+0

Ich verstehe diese Lösung nicht. Wie ändere ich den Anzeigestatus der Seite mithilfe von JavaScript, wenn man bedenkt, dass es verschlüsselt ist? Und wie hilft das Speichern von Daten in ViewState, wenn ViewState selbst nicht beibehalten wird? Der AJAX-Teil davon würde jedoch die Zeitüberschreitung verhindern, wie Klaus beschrieben hat. – David

+0

Page.ViewState ist tatsächlich nicht von einer WebMethod verfügbar (soweit ich das beurteilen kann), also werde ich meine Antwort ändern. Der einzige verbleibende Unterschied in meiner Antwort besteht darin, den AJAX mit den onChange-Ereignissen zu verkabeln. Vielen Dank. – LesterDove

Verwandte Themen