Où stocker les informations de l'utilisateur connecté sur ASP.NET MVC à l'aide de l'Authentification par Formulaires?
Je suis en utilisant ASP.NET MVC et l'Authentification de Formulaires sur mon application. Fondamentalement, je suis d'utilisation FormsAuthentication.SetAuthCookie
de connexion et FormsAuthentication.SignOut
de vous déconnecter.
Dans le HttpContext.Actuel.De l'utilisateur.L'identité que j'ai stocké le nom de l'utilisateur, mais j'ai besoin de plus d'infos sur la session de l'utilisateur. Je ne veux pas stocker l'ensemble de mon Utilisateur obj dans la Session, car il pourrait être grand et avec beaucoup plus d'informations que j'ai besoin.
Pensez-vous que c'est une bonne idée de créer comme une classe appelée LoggedUserInfo
avec uniquement les attributs dont j'ai besoin et puis l'ajouter à la Session variable
? Est-ce une bonne approche?
Ou vous avez de meilleures idées?
Vous devez vous connecter pour publier un commentaire.
J'utilise cette solution:
ASP.NET 2.0 authentification de Formulaires - approche personnalisée et simple
Pour résumer: j'ai créé mon propre IPrincipal mise en œuvre. Il est stocké dans HttpContext.Actuel.Le Cache. Si il est un peu perdu, j'ai nom d'utilisateur côté client l'autorisation de biscuit et de la rebâtir. Cette solution ne repose pas sur la Session, qui peut être facilement perdu.
MODIFIER
Si vous souhaitez utiliser votre capital dans votre contrôleur et rendre testable, vous pouvez le faire:
Dans votre test, vous allez définir l'objet préparé pour les tests. Sinon, il sera pris de HttpContext. Et maintenant, j'ai commencé à penser, pourquoi dois-je utiliser Ninject faire?
Bind<IMyPrincipal>().ToMethod(c => (IMyPrincipal)HttpContext.Current.User).OnlyIf(a => HttpContext.Current.User is IMyPrincipal);
En fait, j'aime utiliser un CustomPrincipal et CustomIdentity que j'ai mis dans l'ouverture de session de la méthode d'action comme
Puis dans l'entité personnalisée, vous pouvez avoir des méthodes que l'accès à des informations spécifiques que vous avez passé dans le constructeur comme
où la propriété DisplayName est déclarée dans le CustomIdentity classe.
Stocker côté serveur dans la session.
Par exemple.
Puis lorsqu'ils se connectent simplement enregistrer les utilisateurs info:
Alors à chaque fois que vous en avez besoin le chercher:
J'ai écrit une couple de questions/réponses concernant personnalisés autorisation MVC:
Comment mettre en œuvre les contrôles d'autorisation dans ASP.NET MVC basé sur les données de Session?
Comment l'Autoriser balise de travail? - Asp.net Mvc
Bien, vous aurez à stocker ces quelque part. Deux principaux endroits possibles si:
Le serveur
Vous pouvez les mettre dans la Session. Je ne vous suggère de créer une classe qui va contenir uniquement les données que vous avez réellement besoin pour éviter de perdre trop de mémoire. Ou vous pouvez également les stocker dans le Cache qui peuvent en avoir beaucoup d'DB appelle quand il y a des quantités énormes d'utilisateurs simultanés.
Le client
Dans ce cas, si vous pouvez limiter la quantité de données avec une classe distincte, et utiliser de quelque manière que ce soit pour sérialiser et l'envoyer au client. Que ce soit dans un cookie ou URI (si la longueur le permet et les cookies sont désactivés)...
Résultat de ces réflexions:
la chose principale serait de créer une catégorie distincte si vous gagnez beaucoup de ressources en mémoire de cette façon. Donc, c'est la première chose que vous devriez faire.