2011-10-31 15 views

Respuesta

23

Son efectivamente igual, ya que accederán a los mismos datos de sesión.

La razón por la que puede llamar al Session en su código subyacente es porque las páginas ASP.Net extienden por defecto el tipo System.Web.UI.Page. Esto tiene una propiedad pública Session. Si observa el código para esto en Reflector, puede ver que simplemente llama al HttpContext.Current.Session (a través de su propia propiedad Context).

En otras clases no tendrá acceso a esa propiedad, pero puede usar HttpContext.Current.Session para acceder a los datos de la sesión, siempre que se ejecute en el contexto de una aplicación web.

+6

Bueno, el objeto que devuelven las propiedades es el mismo, pero si una sesión no existe, HttpContect.Current.Session devolverá nulo, mientras que Page.Session arrojará una HttpException. – Polymorphix

2

No hay diferencia. Ellos son la misma cosa; la segunda forma es más corta :)

2

No hay diferencia. Page.Session devuelve el HttpContext.Current.Session

Dicho esto, he escrito .dll que actúan como extensiones para aplicaciones web. Estos .dll no tienen el concepto de Session. En estos casos, puedo acceder a la sesión actual de la aplicación web que está utilizando mi .dll haciendo referencia a HttpContext.Current.Session

2

No hay diferencia en el comportamiento. Si usa código en su clase personalizada, donde HttpContext no está disponible directamente y desea acceder al valor de la sesión, usaremos la primera línea de código, mientras que la segunda línea se usa al acceder en las clases Página o control.

8

En un escenario stantard son los mismos. La diferencia es que la primera declaración también funcionará en contextos estáticos, como un WebMethod.

+0

Esa es la diferencia más fácil de entender. –

4

Hay una diferencia. El segundo (Session) es una propiedad de muchos objetos .NET, como Page por ejemplo. Por lo tanto, no puede tener acceso a él, en el constructor de esos objetos, por ejemplo. Sin embargo, el primero (HttpContext.Current.Session) siempre está listo y a su disposición (por supuesto, después de que la sesión se cargue en el Pipeline de procesamiento de solicitudes).

1

Otra respuesta bastante exhaustiva de Nicholas Carey https://stackoverflow.com/a/6021261/365017

"de HttpApplication propiedad de sesión muestra un comportamiento diferente que lo hace la de la proporty HttpContext.Current.Session. Ellos ambos devuelven una referencia a la misma instancia HttpSessionState si hay uno disponible Difieren en lo que hacen cuando no hay ninguna instancia de HttpSessionState disponible para la solicitud actual.

No todos los HttpHandler proporcionan estado de sesión. Para hacerlo, HttpHandler debe implementar [una o ambas?] Las interfaces de marcador IRequiresSessionState o IReadOnlySessionState.

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

La implementación de HttpApplication de la propiedad Session arroja una HttpException con el mensaje El estado de sesión no está disponible en este contexto. en lugar de devolver una referencia nula."

+0

Entonces uno da error, otro devuelve nulo ¿estoy en lo correcto? – MonsterMMORPG

Cuestiones relacionadas