asp.net - Diferencia entre Session y HttpContext.Current.Session
(3)
¿Cuál es la diferencia entre Session y HttpContext.Current.Session object?
Nada. Session
solo apunta a HttpContext.Current.Session
.
No hay diferencia.
El getter para Page.Session devuelve la sesión de contexto.
Un poco tarde aquí, pero aquí hay algo que acabo de descubrir.
@Phillipe Leybaert y @CSharpAtl son incorrectos. La propiedad Session
HttpApplication
muestra un comportamiento diferente al de la propiedad HttpContext.Current.Session
. Ambos devolverán una referencia a la misma instancia de HttpSessionState
si hay una disponible. Difieren en lo que hacen cuando no hay ninguna instancia de HttpSessionState
disponible para la solicitud actual.
No todos los HttpHandler
s proporcionan el estado de la sesión. Para hacerlo, HttpHandler
debe implementar [una o ambas?] Las interfaces de marcador IRequiresSessionState
o IReadOnlySessionState
.
HttpContext.Current.Session
simplemente devuelve null
si no hay sesión disponible.
La implementación de HttpApplication
de la propiedad Session
arroja 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 Session
HttpApplication
en tales casos (como en los global.asax
eventos global.asax
) dará como resultado que se HttpException
una HttpException
.
No hace falta decir que la inesperada HttpException
proporciona un WTF? momento si no lo estás esperando.
La propiedad Session
de la clase HttpApplication
se implementa así (desde 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;
}
}