2013-08-21 14 views
5

Sto sviluppando un'applicazione MVC Intranet.NET. Devo memorizzare i dettagli dell'utente come posizione, numero ID ecc. Associati ad ogni utente autenticato.Qual è la procedura migliore per mantenere i dettagli utente autenticati in un'applicazione ASP.NET Intranet MVC

Nelle applicazioni Webform .NET si è utilizzato per salvare i dettagli dell'utente connesso nella sessione. Ma qual è la migliore pratica nell'applicazione .NET MVC?

+1

** [Controlla questo messaggio. Potrebbe essere utile?] (Http://stackoverflow.com/a/17199709/2015869) ** –

+0

Grazie per l'input. Ma ho letto da qualche parte che "TempData è pensato per essere un'istanza molto breve, e dovresti usarlo solo durante le richieste attuali e successive". C'è un modo per mantenere i dati in una determinata sessione utente? –

+0

Si sta utilizzando l'autenticazione di Windows o l'autenticazione dei moduli? Hai un database? –

risposta

1

ci sono un modo pochi a scuoiare questo gatto, ma direi che il fissaggio informazioni del profilo per l'utente sarebbe la più elegante.

Avrete bisogno di un provider di profili che permetta di mantenere i dati del profilo dell'utente. È possibile utilizzare SqlProfileProvider per SQL Server, ma si consiglia di consultare i provider Microsoft ASP.NET Universal ref: http://www.nuget.org/packages/Microsoft.AspNet.Providers

Segue una copia e incolla svergognata di Scott Hanselman. Diciamo che si desidera tenere traccia di compleanno di un utente:

public class MyCustomProfile : ProfileBase 
{ 
    public DateTime? Birthdate { 
     get { return this["Birthdate"] as DateTime?; } 
     set { this["Birthdate"] = value; } 
    } 
} 

allora si sarebbe eresse nel web.config:

<profile inherits="MyApp.Models.MyCustomProfile" defaultprovider="DefaultProfileProvider"></profile> 

Infine, si può tirare nel profilo personalizzato dell'utente corrente con:

var customProfile = HttpContext.Profile as MyCustomProfile; 

DateTime? birthday = customProfile.Birthdate; 

Dovrai impostare il tuo archivio dati, ma questo è principalmente ciò che deve essere fatto. È possibile trovare la piena nitidezza nel blog di Scott Hanselman: http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx

0

Penso che l'adagio "usare lo strumento giusto per il lavoro" si applichi qui. Non vedo nulla di sbagliato nell'archiviazione dei dati in sessione, purché venga utilizzata correttamente.

MVC fornisce altri meccanismi per lo stato a breve termine (ModelState e TempData). Se quelli soddisfano le tue esigenze, usali. TempData utilizza comunque SessionState dietro le quinte (come illustra la domanda this). Se ciò di cui hai veramente bisogno è che i dati rimangano in stato per la durata di una sessione utente e non più, SessionSate è un valido strumento per tale attività.

L'utilizzo della memorizzazione nella cache è anche utile, ma è necessario gestire la scadenza/l'invalidazione della cache. Trovo la memorizzazione nella cache più utile per le cose che non dipendono dalla sessione o dall'utente, che siano più corte o più longeve.

Problemi correlati