2017-02-16 3 views
1

Ich möchte einen Benutzer in eine ASP.NET MVC-Site protokollieren, und die Sitzung läuft sehr schnell ab, in Minuten. Authentifizierung wird in einer Zeile Code getan:Authentifizierung Sitzung läuft auf ASP.NET MVC

authProvider.Authenticate(model.UserName, model.Password) 

Dann habe ich in Web.config:

<authentication mode="Forms"> 
<forms loginUrl="~/Account/Login" name=".ASPXAUTH" timeout="300" slidingExpiration="true"> 

und die Einstellung auf dem IIS auf dem Server 300 Minuten.

Was ist das Problem?

+0

Ist es nicht, weil Ihr 'session timeout' einen niedrigen Wert hat? – krlzlx

+0

das sind Minuten. also sollte es in 300 Minuten ablaufen, aber es läuft in 5. –

+0

Ich spreche nicht über die 'Forms Timeout', sondern die' SessionState Timeout' – krlzlx

Antwort

1

Vergewissern Sie sich, einen sessionState timeout Wert, entspricht Ihrer forms timeout:

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" 
     name=".ASPXAUTH" 
     timeout="300" 
     slidingExpiration="true" /> 
    </authentication> 
    <sessionState timeout="300" mode="InProc" /> 
</system.web> 

Sie müssen auch die Idle Time-out Parameter Ihrer Anwendung Pool auf die gewünschte Authentifizierung Timeout ändern, um die Application Pool zu vermeiden, zu früh zu recyceln und Verliere daher deine Sitzungen. Anwendungspools - - Erweiterte Einstellungen des Anwendungspools in Frage

IIS:

Dieser Parameter kann in gefunden werden.

Referenzen:

Wenn Sie (*) diesen Parameter nicht geändert werden soll, ist eine Lösung, die StateServer Modus der Session zu verwenden, Zustand. Dieser Modus verwendet einen Dienst zum Speichern der Sitzung anstelle des Speichers mit dem Modus In-Process. Es hat den Vorteil, dass die Sitzung nicht verloren geht, wenn der Anwendungspool wiederverwendet wird. Es ist auch sehr einfach zu konfigurieren:

<system.web> 
    <sessionState mode="StateServer" 
     stateConnectionString="tcpip=loopback:42424" 
     cookieless="false" 
     timeout="300" /> 
</system.web> 

(*) 5 Minuten ist sehr niedrig. Der Standardwert ist 20 Minuten. Ich rate daher, es mindestens auf den Standardwert einzustellen, wenn Sie den StateServer Modus verwenden.

Referenz:

+0

Hallo, also das hat zwei Monate geklappt. jetzt ist es nicht mehr. Ich sehe, es gibt zwei Cookies gesetzt, eine Cookies/.ASPXAUTH (läuft ab "Wenn die Browsersitzung endet") und eine andere im lokalen Speicher/Name meiner Website (subdomain.domain.com, aber keine damit verbundenen Metadaten?). Was raten Sie? –

+0

Ich rate Ihnen, den 'StateServer'-Modus des Sitzungszustands zu versuchen, wie im zweiten Teil meiner Antwort beschrieben. – krlzlx

+0

Richtig, das habe ich übersehen. Ich habe jetzt beide hinzugefügt und verliere die Sitzung in ungefähr 15 Minuten. Sollte sich der Text in stateConnectionString von "tcpip = loopback: 42424" unterscheiden? –

Verwandte Themen