2009-01-12 5 views
6

Ich habe ein wirklich schlechtes Problem, egal, was ich versuche, der Benutzer wird nach 10 Minuten abgemeldet.ASP.Net-Formularauthentifizierung Abmelden von Benutzern nach 10 Minuten

Ich benutze ASP.Net 2.0 unter IIS 6.0 auf Server 2003 R2 Standard Edition läuft als ein virtueller Server mit allen anwendbaren Updates und. NET 3.5 SP1.

Der Client ist Internet Explorer 7.0

Nachfolgend finden Sie die web.config Einstellungen sind:

<!-- Authentication Mode --> 
<authentication mode="Forms"> 
    <forms name=".RecipeViewer" timeout="240" /> 
</authentication> 

Im Folgenden wird der Code verwendet, um die Genehmigung Cookie zu setzen:

Private Sub SetCookie(userName) 
       ' Use security system to set the UserID within a client-side Cookie 
       Dim ticket As New FormsAuthenticationTicket(1,userName, DateTime.Now, DateTime.Now.Add(Me.GetFormsAuthSettings.Forms.Timeout), True, String.Empty, FormsAuthentication.FormsCookiePath) 
       Dim hash As String = FormsAuthentication.Encrypt(ticket) 
       Dim cookie As New HttpCookie(FormsAuthentication.FormsCookieName, hash) 

       cookie.HttpOnly = True 

       If (ticket.IsPersistent) Then 
        cookie.Expires = ticket.Expiration 
       End If 

       Response.Cookies.Add(cookie) 

       ' Redirect browser back to originating page 
       Response.Redirect(Request.ApplicationPath) 
End Sub 

    Private Function GetFormsAuthSettings() As System.Web.Configuration.AuthenticationSection 
     Return DirectCast(System.Configuration.ConfigurationManager.GetSection("system.web/authentication"), System.Web.Configuration.AuthenticationSection) 
    End Function 

ich vorher war Ich benutze den FormsAuthentication.SetAuthCookie und probiere sogar die FormsAuthentication.RedirectFromLoginPage-Methode aus, aber beide hatten das gleiche Ergebnis, weshalb ich es getan habe die Implementierung des Hardcookies, die intern (über die Anzeige in Reflector) der FormsAuthentication-Klasse ausgeführt wird.


Das Problem ist NICHT reproduzierbare im Visual Studio 2008 asp.net-Hosting-Umgebung oder in IIS 7.0.


EDIT: Cookies aktiviert sind, auch die gehostete Website als vertrauenswürdige Site hinzugefügt wurde.


EDIT: Google Chrome und Firefox haben dieses Problem nicht.


EDIT: Geprüfte Plätzchen auf Zielmaschine wird nach 4 Stunden nach der Einstellung (timeout = 240 Minuten) abläuft.


EDIT: Als Haus sagt, jeder liegt. Der Benutzer hat die neue Codebasis nicht wirklich getestet und ging auf eine vorgefasste Meinung, dass die Software immer noch kaputt sei. Danke an alle, die in diesem Thema geantwortet haben.

Schließen Sie dies nicht mehr für relevant, aber halten Sie es herum, um Menschen zu helfen, das Problem zu beheben, da es einige wirklich gute Techniken zur Problembehandlung in dieser Frage gibt.

+0

Haben Sie, wenn die Cookies gesehen korrekt im Browser mit Firebug und Firecookie gespeichert werden? Und überprüft, ob diese Cookie-Werte nach 10 Minuten an den Server gesendet werden? –

+0

Ich bin nicht vertraut mit Firebug und FireCookie, sind diese Firefox-Erweiterungen? –

+0

yap, http://getfirebug.com/ –

Antwort

6

Es könnte auch sein, dass der Maschinenkopf nicht gesetzt wurde und daher bei jeder Initialisierung der App nach dem Zufallsprinzip generiert wurde (was bedeuten würde, dass das verschlüsselte Authentifizierungsticket mit einem neuen Schlüssel gesalzt würde).

Ich benutze eine Website ein neues Machinekey für meine Anwendungen zu generieren und in der web.config-Stick:

http://www.orcsweb.com/articles/aspnetmachinekey.aspx

<?xml version="1.0"?> 

<configuration> 

    <appSettings/> 
    <connectionStrings/> 
    <system.web> 

     <machineKey validationKey='FED01BCB246D3477F5854D60388A701508AD1DF9099BD3CAC3CA4DAF55F7524B8DD3FA03133BBCA381BC1CD639730445968DFA633A97911187EF187456D692F4' decryptionKey='861E7DF7C2D04297EEFAD47FF3B95F54E87CF28D6C2753D8' validation='SHA1'/> 

    </system.web> 
</configuration> 
+1

+1 große Wartung Sache zu tun :) –

+0

sehr gute Lösung. –

0

Ich erinnere mich vage an etwas über die IIS-Session-Timeout-Einstellungen, die alles überschreiben können, was Sie in der Datei web.config festgelegt haben. Überprüfen Sie, dass Ihre Anwendungseigenschaften kein Timeout von 10 Minuten festlegen (Eigenschaften-> Konfiguration-> Optionen).

+0

Würde dies die Authentifizierung beeinträchtigen? In meiner Testumgebung kann ich die App neu erstellen, was ein Re-Jit (auch neue Sitzungen) verursacht und die Authentifizierung ist weiterhin gültig. –

+0

Möglicherweise, aber ich kann nicht sicher sein, ohne es zu testen. – inferis

0

Ich hatte in der Vergangenheit ein ähnliches Problem, aber ich bin mir nicht sicher, worüber Sie sprechen. Habe ich recht, dass Ihr Problem nicht auf Produktionssystemen (oder Systemen mit hoher Auslastung) auftritt? Wenn dies der Fall ist, liegt das Problem möglicherweise im Timeout des Worker-Thread-Leerlaufs. Sie können versuchen, es zu ändern oder deaktivieren Sie unter IIS-Manager-> klicken Sie mit der rechten Maustaste auf Anwendungspools, gehen Sie zur Registerkarte Leistung, es ist das Kontrollkästchen unter Idle Timeout. Das Zeug auf der Registerkarte "Recycling" dieses Dialogfelds könnte auch für Sie von Interesse sein.

+0

Wie bei der obigen Frage, wie wirkt sich Application-Timeout oder Neustart der Anwendung auf Authentifizierungscookies aus, sollten diese über Session-Neustarts hinweg bestehen bleiben (wie sich diese Site für Tage und Tage und Tage merkt ...) –

+0

Ich denke, es hängt davon ab, wie Werte in den Authentifizierungscookies werden auf dem Server gespeichert.Wenn ein Sitzungsserver verwendet wird, wird dieser bei Neustarts beibehalten. Wenn Sie jedoch ein Zeitlimit für eine harte Sitzung haben, sollte dieser Server gelöscht werden. – inferis

+0

der vollständige code für die auth cookie ist oben, ich habe keinen zusätzlichen code für die authentifizierung außer für isauthenticated zu überprüfen. –

1

Obwohl Ihre Anforderung für IE ist, können Sie Firefox mit Firebug und FireCookie verwenden, um Ihre Cookies und Abläufe zu überwachen.

Im IE können Sie die IE Developer Toolbar herunterladen, in der Sie Ihre Cookie-Werte über das Menü Cache \ Cookie-Informationen anzeigen sehen können.

Es ist merkwürdig, wenn es in Google Chrome richtig funktioniert, vielleicht können Sie die Anfrage mit dem Application_BeginRequest Ereignis in der global.asax erfassen und die erhaltenen Cookies und ihre Werte protokollieren.

+0

Die Cookies werden in allen 3 Browsern, Firefox, Chrome und IE verifiziert. –

+0

Alle 3 senden die Cookies für die ersten 10 Minuten, und dann sendet IE sie nicht mehr (von seiner Maschine, nicht die Entwicklungsumgebung) nach diesen 10 Minuten. –

+0

Gut, jetzt würde ich überprüfen, ob ein Add-on die Cookies putzt oder blockiert –

1

Nicht behandelte Ausnahmen könnten den Neustart des Procs verursachen. Dies könnte zu dem seltsamen Verhalten beitragen. Wird in den Eventlogs etwas gemeldet?

+0

+1 für Vorschlag, aber nichts im Ereignisprotokoll. –

0

Der Client hat den Produktionscode nicht getestet und reagierte immer noch auf das vorherige Problem, bevor ein Patch auf die Produktionsumgebung angewendet wurde.

Wenn Sie es nicht in derselben Umgebung replizieren können, würde ich eine Besprechung empfehlen, bei der Sie das Problem replizieren können.


Kennzeichnung als Antwort nach 48 Stunden.

0

ändern Sie Ihren Sitzungsstatus speichern InProc verwenden, werden Sie wahrscheinlich mit Blick auf ein ähnliches Problem wie bei mir, dass die Sitzung im Grunde nur dann abstürzte, wenn der Benutzer einen Fehler fand, wenn sie nicht mit InProc gespeichert wurde.

Session Arten: http://msdn.microsoft.com/en-us/library/ms178586(v=vs.100).aspx

Verwandte Themen