2012-07-25 4 views
7

Sto lavorando nell'applicazione MVC3 con Razor. Nel mio controller account dopo aver convalidato l'utente, ottengo l'utente ClientID dal database. Qui voglio persistere ClientID nella variabile Session. che stava usando la vista di tutti i controller e Razor.Come persiste i dati usando la variabile di sessione nella vista del rasoio mvc3?

Non ho idea di quale sia il modo migliore per implementare questo.OR Come mantenere i dati nella variabile di sessione. E come utilizzare i dati persistenti nella variabile di sessione in tutto il controller.

Grazie per il vostro aiuto ..

+0

Questo potrebbe essere utile http://www.hanselman.com/blog/TroubleshootingExpiredASPNETSessionStateAndYourOptions.aspx – ManirajSS

risposta

2

Se si utilizza ASP.NET Forms Authentication, il nome utente è già memorizzati in un cookie. È possibile accedervi dal controller tramite

Controller.User.Identity.Name 

È possibile memorizzare l'ID utente come nome utente. Quando si chiama qualcosa come

FormsAuthentication.RedirectFromLoginPage 

Assegnare l'ID invece di un nome. L'ID può quindi essere trovato utilizzando il metodo sopra riportato e non sono necessari dati di sessione aggiuntivi. Se vuoi memorizzare qualcosa nella sessione, chiama lo

Session["UserID"] = value; 

Dal controller.

+0

Grazie per la risposta .. In realtà stiamo implementando l'accesso Tenant Multi per il nostro Framework. Quindi sono un po 'confuso riguardo alla persistenza dei dati attraverso il controller. quindi mi puoi suggerire quale sia l'approccio migliore? – user10489

18

solito scrivere un wrapper sessione che mi permette un facile accesso ad essa in futuro:

public class SessionData 
{ 
    const string ClientId_KEY = "ClientId"; 

    public static int ClientId 
    { 
     get { return HttpContext.Current.Session[ClientId_KEY] != null ? (int)HttpContext.Current.Session[ClientId_KEY] : 0; } 
     set { HttpContext.Current.Session[ClientId_KEY] = value; } 
    } 
} 

Dopo di che si può accedere da qualsiasi luogo come questo:

int clientId = SessionData.ClientId; 

Se si desidera può usare interi oggetti in Session come questo.

Oppure si può impostare in questo modo: SessionData.ClientId = clientId;

+0

Grazie per la vostra risposta ... Fondamentalmente stiamo implementando l'accesso Multi Tenant per il nostro framework. Quindi la sessione è un buon approccio? E sto ottenendo il ClientID basato su utente registrato dal DB. quindi, come posso associare CliendID alla variabile Session? – user10489

+0

Non posso conoscere tutte le implicazioni e i requisiti del tuo progetto, ma finora non vedo alcun problema nell'utilizzare Session. Ho aggiornato la mia risposta per mostrare come è possibile impostare ClientId in Session usando il wrapper. – Dmitry

+0

Qual è il vantaggio nello scrivere un wrapper per accedere alla sessione – Nipuna