variable net mvc httpsessionstate current asp c# asp.net session session-variables httpcontext

c# - httpsessionstate - session in asp net core mvc



¿Cuál es la diferencia entre estos dos HttpContext.Current.Session y Session-asp.net 4.0 (8)

¿Cuál es la diferencia entre estos 2 códigos?

HttpContext.Current.Session["myvariable"] Session["myvariable"]

asp.net 4.0 y C # 4.0


De hecho, son iguales, ya que accederán a los mismos datos de la sesión.

La razón por la que puede llamar a Session en su código subyacente es porque las páginas ASP.Net por defecto amplían el tipo System.Web.UI.Page . Esto tiene una Session propiedad pública. Si observa el código para esto en Reflector, puede ver que simplemente llama a 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 y cuando esté ejecutando en el contexto de una aplicación web.


En un escenario estándar son lo mismo. La diferencia es que la primera declaración también funcionará en contextos estáticos, como un método Web.


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, por ejemplo, en el constructor de esos objetos. 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 haya cargado en el Proceso de procesamiento de solicitudes).


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


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


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

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


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

"La propiedad Session de HttpApplication muestra un comportamiento diferente al de la proporty HttpContext.Current.Session. Ambos devolverán una referencia a la misma instancia de HttpSessionState si está disponible. Se diferencian en lo que hacen cuando no hay ninguna instancia de HttpSessionState disponible para La solicitud actual.

No todos los HttpHandlers proporcionan el estado de la sesión. Para hacerlo, el HttpHandler debe implementar [¿uno o ambos?] Las interfaces del marcador IRequiresSessionState o IReadOnlySessionState.

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

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


Internamente, Page.Session solo apunta a HttpContext.Current.Session, pero todavía hay dos diferencias dependiendo de dónde se llama.

Se puede acceder a Page.Session solo desde las clases heredadas de System.Web.UI.Page y lanzará HttpException cuando se acceda desde WebMethod.
Desde donde se puede acceder a HttpContext.Current.Session desde cualquier lugar, siempre y cuando se ejecute en el contexto de una aplicación web.


Otra diferencia importante donde puede acceder a Page.Session pero no puede acceder a HttpContext.Current.Session:

Si hay un método llamado GetData en su página (heredado de System.Web.UI.Page) que se ejecuta simultáneamente en diferentes subprocesos de algún otro método de página, el método GetData puede acceder a Page.Seession, pero no puede acceder a HttpContext.Current .Sesión.

Se debe a que se ha llamado a GetData desde un subproceso diferente, por lo que HttpContext.Current es nulo y HttpContext.Current.Session lanzará una excepción de referencia nula, pero Page.Session se adjuntará con el objeto de la página para que el método de la página GetData pueda acceder a la Page.Session.