2009-06-02 50 views

Respuesta

7

No hay diferencia.

El getter para Page.Session devuelve la sesión de contexto.

1

Nada. Session solo apunta al HttpContext.Current.Session.

94

Un poco tarde aquí, pero esto es algo que acabo de descubrir.

@Phillipe Leybaert y @CSharpAtl son incorrectos. HttpApplication 's Session propiedad muestra un comportamiento diferente que el de la propiedad HttpContext.Current.Session. Ambos devolverán una referencia a la misma instancia HttpSessionStatesi está disponible. Difieren en lo que hacen cuando no hay ninguna instancia de HttpSessionState disponible para la solicitud actual.

not all HttpHandler s proporcionan el estado de la sesión. Para hacerlo, el HttpHandlerdebe implementar [una o ambas?] Las interfaces de marcador IRequiresSessionState o IReadOnlySessionState.

HttpContext.Current.Session simplemente devuelve null si no hay sesión disponible.

aplicación de la propiedad Session El HttpApplication 's lanza una HttpException con el mensaje Session state is not available in this context. en lugar de devolver una referencia null.

Algunos ejemplos de HttpHandler que no implementan sesión son los controladores predeterminados para recursos normalmente estáticos, como archivos de imagen y CSS. Cualquier referencia a la propiedad HttpApplicationSession en tales casos (como en los controladores de eventos global.asax) dará como resultado un HttpException.

No hace falta decir que el inesperado HttpException proporciona una WTF? momento si no lo estás esperando.

El Session propiedad de la clase HttpApplication se implementa por lo tanto (de reflector):

[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

Gracias por esforzarse para completar una mejor respuesta. – nicodemus13

+7

No hay problema. ¿Acabo de tener una WTF bastante molesta? momento que tomó un tiempo para resolverlo. Pensé en documentarlo para que alguien más no tuviese que perder el tiempo averiguando qué estaba pasando. –

Cuestiones relacionadas