2009-09-18 12 views
7

Sto costruendo una classe per memorizzare l'ID utente e il ruolo utente in una sessione. Non sono sicuro di come si comporterà questa classe quando più utenti si trovano sul sito nello stesso momento. Qualcuno vede un problema con questo?Classe di sessioni statiche e più utenti

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 e incoraggia le cattive pratiche come l'utilizzo di helper "globali" statici. Non è un problema tecnico, più un problema mentale con effetti a lungo termine – MikeSW

risposta

6

Il codice che hai postato è la replica esatta di un codice che abbiamo qui.

Funziona bene da 2 anni.

Ogni utente accede alla propria sessione. Ogni richiesta fatta al server è una nuova discussione. Anche se 2 richieste sono simultanee, HttpContext.Current è diverso per ciascuna di queste richieste.

3

Riceverai una nuova sessione per ogni connessione. Nessun utente potrà condividere la sessione. Ogni connessione avrà il proprio valore SessionID. Finché l'utente rimane sulla tua pagina (non chiude il browser, ecc.) L'utente manterrà quella sessione da una richiesta alla successiva.

+0

Non necessariamente ... Se si sta eseguendo l'autenticazione cross-site ... È possibile avere un utente appena autenticato che utilizza la stessa sessione. Ho incontrato questo problema prima. La sessione è indipendente dall'autenticazione. Se un utente è in grado di terminare la sessione e uccidere l'autorizzazione sul primo sito ... l'autorizzazione verrà eliminata dal secondo sito, ma la sessione è separata. – KingOfHypocrites

0

Questo funzionerà correttamente per gli utenti più numerosi che accedono all'applicazione poiché verranno generati diversi sessionid generati per tutti gli utenti che accedono all'applicazione in modo concorrente. Funzionerà in modo simile se hai definito due diverse variabili di sessione nel tuo sistema. Sarà come avvolgere gli stati di sessione di rimorchio usando la classe wrapper statica SessionHandler.

Problemi correlati