2009-06-02 10 views

Odpowiedz

7

Nie ma różnicy.

Element pobierający dla Page.Session zwraca sesję kontekstową.

1

Nic. Session wskazuje tylko na HttpContext.Current.Session.

94

Trochę za późno, ale tutaj jest coś, co właśnie odkryłem.

@Phillipe Leybaert i @CSharpAtl są niepoprawne. Właściwość HttpApplication ma inną aktywność niż właściwości obiektu HttpContext.Current.Session. Oba będą zwracać odwołanie do tej samej instancji HttpSessionState, jeśli jest dostępna jedna. Różnią się tym, co robią, gdy nie ma instancji HttpSessionState dostępnej dla bieżącego żądania.

Nie wszystkie HttpHandler s zapewniają stan sesji. Aby to zrobić, należy zaimplementować [jeden lub oba?] Interfejsy znaczników HttpHandler, lub .

HttpContext.Current.Session po prostu zwraca null, jeśli nie ma sesji.

wykonanie W HttpApplication „s nieruchomości Session zgłasza HttpException z komunikatem Session state is not available in this context. zamiast zwracania null odniesienia.

Niektóre przykłady HttpHandler, które nie implementują sesji, są domyślnymi procedurami obsługi zwykle statycznych zasobów, takich jak pliki obrazów i CSS. Wszelkie odniesienia do właściwości HttpApplication w takich przypadkach (jak w przypadku programów obsługi zdarzeń global.asax) będą skutkować wyświetleniem HttpException.

Nie trzeba dodawać, że nieoczekiwany HttpException zapewnia WTF ?! moment, jeśli nie spodziewasz się tego.

Obiekt klasy HttpApplicationSession jest realizowany w ten sposób (z reflektorem):

[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
public HttpSessionState Session 
{ 
    get 
    { 
    HttpSessionState session = null; 

    if (this._session != null) 
    { 
     session = this._session; 
    } 
    else if (this._context != null) 
    { 
     session = this._context.Session; 
    } 

    if (session == null) 
    { 
     throw new HttpException(SR.GetString("Session_not_available")); 
    } 

    return session; 
    } 
} 
+6

Dzięki za wniesienie wysiłku, aby wypełnić lepszą odpowiedź. – nicodemus13

+7

Bez problemu. Właśnie miałem dość irytujący WTF? moment, który zajęło trochę czasu. Pomyślałem, że udokumentuję to, żeby ktoś inny nie musiał tracić czasu na zastanawianie się, co się dzieje. –

Powiązane problemy