1

Benötigen Sie Hilfe zu einem Session-Timeout-Problem in einer ASP.Net-Webanwendung? Im Wesentlichen läuft die Sitzung ca. 10-15 Sekunden nach dem Login ab.MVC3-Session-Timeout nach 10 Sekunden

Seite Anmerkung: Ich verwende eine benutzerdefinierte Kombination aus FormsAuthentication und Grundsicherung

Meine Session.IsNewSession nach 3-4 guten Postbacks nach dem Login auf true gesetzt wird.

Mein Web.Config hat die folgenden ...

<sessionState mode="InProc" timeout="130" regenerateExpiredSessionId="true" stateNetworkTimeout="120" compressionEnabled="true" cookieless="UseCookies" /> 
<authentication mode="Forms"> 
    <forms timeout="120" ticketCompatibilityMode="Framework40" enableCrossAppRedirects="true" /> 
</authentication> 

Wo ich das Timeout glauben Minuten bezieht sich ....

Ich habe eine MVC 3-Anwendung mit einer Action

registriert
public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new MyActionFilterAttribute()); 
    } 

In der OnActionExecuting suche ich nach einer aktuellen Sitzung, um den Zugriff auf Controller-Aktionen zu verhindern, auf die ein nicht autorisierter Benutzer nicht zugreifen darf.

+0

Warum möchten Sie eine Sitzung verwenden, um die Autorisierung zu überprüfen? – ZippyV

Antwort

1

Also habe ich festgestellt, dass der Webserver seinen AppPool schneller als meine Sitzung Lebensdauer aktualisiert hat. Dies würde dazu führen, dass dieselbe SessionId verwendet wird, aber auch das IsNewSession-Flag gesetzt wird.

Da ich keine Kontrolle über die Lebensdauer von AppPool habe, konnte ich die Sitzung im InProc-Modus in IIS behalten.

Ich löste das Problem, indem ich die Persistenz des Sitzungszustands in eine gehostete SqlServer-Datenbank verlagerte. Dadurch konnte die Sitzung bestehen bleiben, obwohl AppPool wiederverwendet wurde.

Ich würde die Lösung für jede andere Person empfehlen, die sieht, dass ihre ansonsten stabile Website ihren Sitzungsstatus verliert, wenn sie auf einem Server gehostet wird, auf den sie keinen administrativen Zugriff haben.

Oh, und ich fand, dass IIS-Protokolle hier ziemlich nutzlos waren. Die beste Diagnoseprotokollierung hier, fand ich, war meine eigene manuelle Protokollierung, um festzustellen, dass dies das Szenario war.