ASP.Net MVC Magasin Entité Utilisateur Dans la Session
Je suis en train d'élaborer un ASP.Net MVC 3 application Web avec Entity Framework 4. Lorsqu'un utilisateur se connecte à ma demande, je voudrais stocker leurs entité utilisateur (prénom, nom, etc) dans une session qui peut alors accéder à l'ensemble de l'application.
Je comprends que cela peut ne pas être une bonne idée parce que quand ObjectContext ferme/dispose, puis l'Utilisateur de l'entité est détachée et les détails de l'utilisateur pourrait être perdu.
J'ai pensé à une autre méthode pourrait être, lorsque l'utilisateur se connecte, attribuer l'identifiant (Clé Primaire) à une variable de session, c'est à dire:
HttpContext.Current.Session["currentUserID"] = user.userID;
Ensuite créer une classe dans le UserService classe comme ceci:
public static User CurrentUser
{
get
{
return Data.DBEntities.Users.Where(u => u.userID == HttpContext.Current.Session["currentUserID"]).FirstOrDefault();
}
}
Qui doit retourner une Entité Utilisateur basée sur le currentUserID variable de session. Ce n'est pas de travail pour moi, cependant, je reçois un couple d'erreurs
Cannot convert lambda expression to type 'string' because it is not a delegate type
Delegate 'System.Func<Asset.Model.User,int,bool>' does not take 1 arguments
Est cette approche que je prends de la corriger, ou est-il un meilleur moyen?
Tous les commentaires seront très appréciés.
OriginalL'auteur tcode | 2011-02-14
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ne pas stocker à la sécurité de l'information sensible dans
Session
. Google "ASP.NET détournement de Session" pour info pourquoi.Cela dit, ce code peut être fait pour travailler. Vous avez juste une erreur de casting. Aussi, Vous n'êtes pas tenir compte du fait que
Session
peut et ne expirer durant la connexion. Vous pouvez faire ceci:...dont au moins compile, mais n'est pas sécurisé et parfois lancers.
Il serait préférable de stocker l'ID de l'utilisateur sur un l'entité personnalisée, ce qui est sûr et n'a pas de date d'expiration.
OriginalL'auteur Craig Stuntz
Vous pouvez stocker toute l'entité de Session. Il sera détaché, mais cela ne veut pas dire qu'il a perdu les valeurs uniquement dans le cas d'un chargement différé vous ne serez pas en mesure de lazy load propriétés de navigation.
Dans votre code actuel essayez d'obtenir votre
currentUserId
temporaire variable et utiliser cette variable dans votre requête.Session
même sans le risque supplémentaire.Session
est spécifique à un utilisateur de cache, pas d'un usage général, banque de données sécurisée.Les bons points.
OriginalL'auteur Ladislav Mrnka