2009-11-03 3 views
0

J'ai une expérience avec CakePHP et j'ai commencé à coder sur ASP.NET MVC framework. J'ai un problème avec le système de connexion. Comment puis-je empêcher les utilisateurs de se connecter une seule fois simultanément sur mon système?ASP.NET MVC n'autorisant qu'un utilisateur connecté

Je peux créer un champ dans ma base de données où le client devient actif lors de la connexion. S'il se déconnecte, je peux activer la valeur false. Mais que faire si la session se termine juste? Comment puis-je l'attraper?

Répondre

0

Malheureusement, il s'agit d'un défi en raison de la façon dont les événements de fin de session sont implémentés car vous n'avez pas accès aux informations dont vous avez besoin lorsqu'ils tirent. Donc, retournez un peu le problème, si vous suivez la session pour laquelle vous vous êtes connecté pour la dernière fois, puis si vous recevez une requête du même utilisateur authentifié dans une session différente, supprimez l'auth pour cette session (en effet l'ancienne session) avec une redirection appropriée vers un message approprié.

La clé ici est le suivi non seulement qui est actuellement connecté, mais aussi l'ID de session pour ce login. Les détails sont un peu plus compliqués - mais vous pouvez effectuer le test à un niveau de requête ou en ajoutant votre propre classe de pages de base, en en déduisant toutes vos "vraies" pages et en vérifiant un événement de page.

+0

Je peux conserver le numéro de session dans ma base de données. Si l'utilisateur se déconnecte, il est supprimé. Mais si la session de l'utilisateur se termine le sessionID reste là. Donc, quand l'utilisateur se connecte, je dois vérifier si l'ID de session actuel est différent de celui de la base de données et si le délai d'expiration de la session est terminé, en conservant également la date de connexion de l'utilisateur. – gong

+0

Hmm, en quelque sorte. Il n'y a pas une seule solution. La façon dont je le regardais était que lorsqu'un utilisateur se connecte, vous ne vous souciez pas particulièrement de la session précédente car cette session est maintenant invalide et l'utilisateur (de la "vieille" session) doit être déconnecté de force. Ce qui vous intéresse, c'est si la combinaison de l'utilisateur * et * session est valide lorsque vous faites une demande. – Murph

3

Cette article fournit une solution possible.

+0

Vous obtenez un upvote 'cos qui fait quelque chose de similaire à ma suggestion et a du code! – Murph

Questions connexes