2011-02-04 32 views
5

¿Hay algún problema en el siguiente código en términos de usuarios múltiples de la misma aplicación web? Quiero decir, sé que una cadena puramente estática se compartirá en todas las sesiones para una única aplicación ASP.NET, pero dado que esto se refiere explícitamente al Current.Session, aunque es estático, parece que siempre se referirá a la instancia de sesión. del "usuario actual".¿La referencia estática a HttpContext.Current.Session devuelve la misma sesión para todos los usuarios?

Pero ocurre un error que podría ser explicado por todos los que comparten el valor actual de Mode y, por lo tanto, el cambio más reciente que sobrescribe el valor de modo de todos los demás.

(de fondo:. Esta cadena está en una clase Helpers que se utiliza en toda la aplicación no quiero hacer referencias codificadas difíciles de Session["Mode"] en toda la aplicación y no quiero tener que pasar Session["Mode"] en cada método llamada de una página de aspx.cs.)

public static string Mode 
{ 
    get 
    { 
     var value = HttpContext.Current.Session["Mode"]; 
     return (value ?? string.Empty).ToString(); 
    } 
    set 
    { 
     HttpContext.Current.Session["Mode"] = value; 
    } 
} 
+0

"Obtiene o establece el objeto HttpContext para la solicitud HTTP actual." http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx –

Respuesta

8

HttpContext.Current siempre devuelve el contexto de la petición actual (si hay es una solicitud actual).

Como cada usuario va a ejecutar una solicitud diferente, cada contexto será diferente.

0

Su propiedad es static. Esta es en realidad la causa de compartir la propiedad entre los usuarios.

Ver Scope of static Variable in multi-user ASP.NET web application para más detalles.

+0

La propiedad es una fachada sobre un método 'get' y' set' en este caso. Por lo tanto, el hecho de que los datos que se obtienen provienen de la sesión local hace que las referencias a esta propiedad dependan de la sesión y, por lo tanto, no se compartan entre los usuarios. –

+0

Dado que no puede llamar a los miembros de la instancia desde un miembro estático, revisaría 'HttpContext.Current.Session' para ver cómo exactamente lo solucionan y lo hacen específico para el usuario. Si tengo tiempo lo buscaré, pero la respuesta será interesante. – toddmo

Cuestiones relacionadas