HttpContext.Aktuelle.Session-null-Element

ich bin die Speicherung in HttpContext.Aktuelle.Sitzung Aktueller Benutzer, SiteUser ist single-Ton-Klasse, präsentiert aktuelle aktiv-siteuser, und wenn er angemeldet ich bin die Schaffung neuer SiteUser() im controller und im Konstruktor hinzufügen, ihn zu der Sitzung:

public static SiteUser Create()
{
    HttpContext.Current.Session[sessionKey] = new SiteUser();

    return HttpContext.Current.Session[sessionKey] as SiteUser;
}

dann, mit jeder Anfrage an der server-Dienste, die ich bin überprüfung ist Benutzer zur Verfügung in der Sitzung:

public static SiteUser Current
{
    get
    {
        if (HttpContext.Current.Session == null || HttpContext.Current.Session[sessionKey] == null)
        {
            throw new SiteUserAutorizationExeption();
        }

        return HttpContext.Current.Session[sessionKey] as SiteUser;
    }
}

sonst bin ich erzeugen non-auth-user-Ausnahme und leiten ihn auf die Anmelde-Seite.
aber manchmal HttpContext.Aktuelle.Session[sessionKey] null ist, aber HttpContext.Aktuelle.Session nicht null und FormsAuthenticationTicket verfügbar ist und Abgelaufen Eigenschaft ist auch falsch.
kann mir jemand helfen, warum HttpContext.Aktuelle.Session[sessionKey] kann null sein?

UPD: webconfig-Sitzung-Einstellungen: <sessionState mode="InProc" timeout="20" />

UPD: sessionKey ist: public const string sessionKey = "SiteUser";

UPD2: ich hab vergessen zu ergänzen, dass in der session gespeichert, Kultur Einstellungen:

HttpContext.Current.Session["Culture"]

und bei der Ausnahme hat, dass HttpContext.Aktuelle.Session[sessionKey] ist null -, Kultur-Element nicht

UPD3: ich habe heruntergeladen, symbol-Tabellen der Quelle .NET Framework und setzen Sie Haltepunkte an SessionStateItemCollection auf ändern Sammlung Elemente. und ich beschloss, dass ich einige Fehler:
1) alle Sammlungsobjekte sind null — "Kultur" nach
2) es geschieht am Ende der Sitzung Veranstaltung
ich kann nicht verstehen, wie es sein kann, weil im web.config session-timeout eingestellt ist 20

Ist es der in-memory-session? oder konfiguriert ist, um bestehen zu einer Datenbank? Auch : ist der IIS vielleicht recycling der app-pool?
mmm.. ich bin mit InProc-session-Modus, wird es bedeuten, dass die Sitzung im Arbeitsspeicher? ist der IIS vielleicht recycling der app-pool - ich weiß nicht sicher, momentan bin ich am laufen asp.net Entwicklung server
Ich glaube nicht das der dev server wird recyceln - das ist ein IIS Sache
Hast du dein problem lösen?
ja. das eigentliche problem war in den IIS-cache-Einstellungen. unter hoher Last kann es cache-cookies mit sessions

InformationsquelleAutor Boo | 2011-01-17

Schreibe einen Kommentar