2009-09-18 24 views
7

Estoy creando una clase para almacenar ID de usuario y función de usuario en una sesión. No estoy seguro de cómo se comportará esta clase cuando haya varios usuarios en el sitio al mismo tiempo. ¿Alguien ve un problema con esto?Clase de sesión estática y usuarios múltiples

public static class SessionHandler 
    { 
     //*** Session String Values *********************** 

     private static string _userID = "UserID"; 
     private static string _userRole = "UserRole"; 

     //*** Sets and Gets ********************************************************** 

     public static string UserID 
     { 
      get 
      { 
       if (HttpContext.Current.Session[SessionHandler._userID] == null) 
       { return string.Empty; } 
       else 
       { return HttpContext.Current.Session[SessionHandler._userID].ToString(); } 
      } 
      set 
      { HttpContext.Current.Session[SessionHandler._userID] = value; } 

     } 
     public static string UserRole 
     { 
      get 
      { 
       if (HttpContext.Current.Session[SessionHandler._userRole] == null) 
       { return string.Empty; } 
       else 
       { return HttpContext.Current.Session[SessionHandler._userRole].ToString(); } 
      } 
      set 
      { HttpContext.Current.Session[SessionHandler._userRole] = value; } 
     } 

} 
+1

Untestable y fomenta malas prácticas como el uso de ayudantes "globales" estáticos. No es un problema técnico, más un problema de mentalidad con efectos a largo plazo – MikeSW

Respuesta

6

El código que ha publicado es la réplica exacta de algún código que tenemos aquí.

Ha funcionado bien desde hace 2 años.

Cada acceso de los usuarios es propio. Cada solicitud hecha al servidor es un hilo nuevo. Aunque 2 solicitudes son simultáneas, HttpContext.Current es diferente para cada una de esas solicitudes.

3

Tendrá una sesión nueva para cada conexión. No hay dos usuarios compartirán la sesión. Cada conexión tendrá su propio valor de SessionID. Mientras el usuario permanezca en su página (no cierre el navegador, etc.) el usuario retendrá esa sesión de una solicitud a la siguiente.

+0

No necesariamente ... Si está realizando una autenticación entre sitios ... Puede hacer que un usuario recién autenticado use la misma sesión. Me he encontrado con este problema antes. La sesión es independiente de la autenticación. Si un usuario puede finalizar la sesión y cancelar la autorización en el primer sitio ... la autorización desaparecerá del segundo sitio, pero la sesión será independiente. – KingOfHypocrites

0

Esto funcionará bien para usuarios múltiples que accedan a su aplicación, ya que se generarán diferentes sesiones para todos los usuarios deficientes que accedan a la aplicación de manera concurrente. Funcionará de manera similar si ha definido dos variables de sesión diferentes en su sistema. Será como envolver estados de sesión de remolque utilizando la clase contenedora estática SessionHandler.

Cuestiones relacionadas