Une seule connexion simultanées par utilisateur dans Asp.net
est-il possible de ne permettre qu'une connexion simultanées par utilisateur dans Asp.Net application web?
Je travaille sur une application web dans laquelle je veux faire en sorte que le site web n'autorise qu'une seule connexion par utilisateur à la fois . Comment vérifier que le courant de l'utilisateur déjà connecté ou non .
suggèrent correcte de la méthode d'identification par lequel nous pouvons nous occuper de ce problème . Je pense que nous devrions utiliser l'état de session sql server pour gérer ce problème . ce que vous suggérez ?
J'ai pensé à une solution pour elle . je ne sais pas si c'est bon ou pas . nous pouvons faire quelque chose comme :
- Lors de la connexion de l'utilisateur dans le système, puis insérer l'id de session dans la colonne utilisateur . (nous allons utiliser la base de données de session, de sorte que nous pouvons obtenir toutes les sessions de données connexes comme isexpired expiredatetime etc facilement).
- Quand même utilisateur, essayez de vous connecter deuxième temps, nous allons vérifier que la colonne d'id de session et vérifier que la session est déjà expiré ou n'est pas . si la session n'est pas expiré, nous n'allons pas permettre à l'utilisateur de connexion .
- Utilisateur mise à jour de l'ID de session à chaque fois lors de la connexion de l'utilisateur .
S'il vous plaît suggérer cette façon correcte ou pas.
nous avons créé formulaire de connexion et le fait de stocker procédure pour vérifier la connexion de l'utilisateur des informations d'identification . nous n'avons pas utilisé les fonctionnalités de l'abonnement .
enregistrer un
isLoggedIn
propriété et lorsque vous authentifier l'élever à 1
, lors de la déconnexion de 0
, si la fin de la session en attendant, vous devez réinitialiser tous, Membership
utilise LastLoginDate
et vous pouvez jouer un peu avec elle.OriginalL'auteur Hiren Dhaduk | 2013-07-07
Vous devez vous connecter pour publier un commentaire.
Veuillez vous référer à:
Lorsque le même ID d'utilisateur essaie de se connecter sur plusieurs appareils, comment puis-je tuer la session sur l'autre appareil?
Hors de la boîte .NET ne prend pas en charge cette. .NET permet de journal simultanées-ins, comme je suis sûr que vous êtes au courant.
J'ai eu cette même exigence exacte, et est venu avec une jolie nappe de solution, a démontré dans le lien ci-dessus. En un mot, mon exigence était d'avoir une seule connexion utilisateur passe à un moment donné. Si le même ID d'utilisateur essayé d'ouvrir une session ailleurs, puis il a tué la session pour la première connexion, par la vérification de l'existence d'un journal-dans le cadre d'une autre ID de Session (cela a permis à l'ID utilisateur d'être connecté à partir de plusieurs instances de leur navigateur web sur leur ordinateur [même ID de Session], ce qui est fréquent, mais pas à partir d'un autre ordinateur [différent de l'ID de Session] (peut-être due à quelqu'un qui a volé leurs informations d'identification, par exemple)). Grâce à la modification du code, vous pourriez probablement modifier le comportement de ce - à savoir, éviter le journal deuxième tentative au lieu de tuer le premier journal qui est déjà actif et en cours d'utilisation.
Bien sûr, il peut ne pas convenir à 100% à ce que tu as besoin, n'hésitez donc pas à le modifier pour l'adapter à vos besoins.
OriginalL'auteur Mike Marks
Vous pouvez créer une entrée de cache par utilisateur et de les stocker l'ID de session. ID de Session sera unique pour chaque session de navigation. Dans votre page de connexion, vous pouvez créer une entrée de cache lorsqu'ils ont réussi à connexion:
(Code tapé dans la zone de texte sans vérification de la syntaxe. Assumer la "pseudo-code".)
Mondiale.asax vous pouvez ensuite accrocher dans le Session_End et viennent à échéance que le cache de l'entrée de l'utilisateur. Voir ce pour le mondial.asax événements.
Cache
au lieu deApplication
? Ou tout simplement globale statiqueDictionary
.Le Cache est géré au mieux et peut être fait pour être synchronisés sur des batteries de serveurs web ou de plusieurs threads avec équilibrage de charge, etc. Les autres (statique ou de l'application) ne sont que dans le processus et de ne pas garantir un objet singleton dans ces cas. Mais, si le cas n'est pas exigeant, vous pouvez utiliser un dictionnaire statique ou de l'objet application.
Cache non distribués, le seul serveur web, pas dans webfarm. cache Distribué est pour tous les webfarm.
Vous avez raison. Je pensais à l'état de Session. La mise en cache n'est pas distribué. Je devrais le savoir. J'ai utilisé memcached et d'autres solutions pour contourner cette limitation. 🙁 Klondike bar!
Vous pouvez utiliser un cache distribué solution comme memcached.org. Puis, dans ma réponse, remplacer tout de référencement "Cache" avec memcached. Ou comme une alternative, comme l'autre réponse dit, vous pouvez utiliser un tableau pour la gérer, mais soyez prudent si vous avez un fort trafic de site web. Verrouillage/blocage pourrait devenir un problème. Memcached ou similaire est probablement une meilleure exécution de façon à le faire, mais il implique plus de l'installation. Klondike est un bar de glace, crème glacée aux etats-unis. Leurs publicités montrer à quelqu'un de faire quelque chose de gentil, et puis il dit "Donner à cet homme une Klondike bar!"
OriginalL'auteur Tombala
Vous pouvez ajouter un indicateur de la colonne dans la table user qui indique que l'utilisateur est actuellement connecté.
Lorsqu'un utilisateur tente de se connecter, vous vérifiez l'indicateur si c'est vrai (que les utilisateurs de compte est déjà utilisé actuellement), alors vous n'avez pas de permettre aux nouveaux utilisateurs de se connecter, si le drapeau est faux les utilisateurs sont autorisés à ouvrir une session en tant que compte là n'est pas utilisé par quelqu'un d'autre à ce moment.
Être conscient cependant que, à moins que l'utilise activement les journaux, vous ne pouvez pas savoir quand les utilisateurs se déplace à autre chose (va à l'autre site web ou ferme le navigateur, etc.) si vous avez besoin de mettre en place une sorte de délai d'expiration de session qui va se connecter automatiquement sur l'utilisateur si il n'y a pas de nouvelles demandes à l'intérieur d'une période de temps spécifiée.
Cela signifie que si un utilisateur ferme son navigateur et essayez de vous connecter sur un appareil mobile, par exemple, il sera impossible de connecter jusqu'à votre spécifié de délai d'expiration de session s'exécute, afin de lui donner le délai d'attente un peu de la pensée que vous ne voulez pas que l'utilisateur déconnecté rapidement (si il/elle fait la lecture d'une longue page, etc). et vous ne voulez pas que les utilisateurs soient dans l'impossibilité de se connecter sur un autre appareil pendant des heures si il/elle a oublié de se déconnecter avant de quitter la maison.
limitations: global statique ne serait pas travailler dans une batterie de serveurs web scénarios. si les sessions sont collantes, une autre session peut être démarré et si elle "colle" à un autre serveur dans la batterie de serveurs, les deux seraient permis. sans collant sessions, le mondial de la statique ne serait pas mis à jour sur les autres serveurs. mondial de la statique devrait également être isolés contre des conditions de course, en particulier si l'application est sujette à la "terre-grab" login surtensions où une inondation d'utilisateurs ont besoin/envie de vous connecter en même temps (par exemple, chaud billet d'événement d'enregistrement commence à l'heure indiquée)
OriginalL'auteur Markus-ipse
Les identifiants de connexion sont stockées sur le cookie, donc de savoir si l'utilisateur est connecté, vous avez besoin de conserver ces informations sur le serveur, préférée sur une base de données parce que la base de données peut être le seul lieu commun parmi les web le jardin ou la batterie de serveurs web.
Ce que vous pouvez garder, est sur une table, que l'
user A
est connecté ou non, de son drapeau, il est connecté, peut-être la dernière interaction de l'utilisateur d'avoir un délai d'attente, etc...Donc, disons que l'Utilisateur est connecté, puis vous ouvrez un drapeau sur la base de données de l'utilisateur, qui est maintenant connecté, et si c'est d'essayer de connecté à nouveau, vous tenir à l'écart.
Pour faire ce travail, vous devez dire à vos utilisateurs de se déconnecter, ou de garder un temps, semblable à la fois sur les informations d'identification.
OriginalL'auteur Aristos
Si Vous utilisez le système d'identité ce lien vous aidera comment seul utilisateur de la connexion de plusieurs périphériques.
Empêcher les Connexions Multiples en Asp.Net Identité
J'ai essayé, ils travaillent très bien dans mon Asp.net Projet Mvc.
SecurityStamp
chaque fois qu'une demande est faite.OriginalL'auteur Hamza Shafiq