2009-07-15 3 views
0

Je dois concevoir un CMS où un ensemble d'informations d'identification ne peut être utilisé qu'une seule fois. Ainsi, si un utilisateur s'est connecté à partir de son ordinateur, personne ne peut se connecter avec ses informations d'identification à partir d'un autre emplacement jusqu'à ce que l'utilisateur se déconnecte.Implémentation correcte de 100% d'IsOnline pour l'adhésion à asp.net

Maintenant, en utilisant le fournisseur d'appartenance asp.net hors de la boîte, la méthode IsOnline retourne un booléen qui reflète la fenêtre de délai d'attente par rapport à la dernière date d'activité. Ce n'est pas une option viable pour moi, car si l'utilisateur ferme juste le navigateur après s'être connecté, IsOnline sera toujours vrai. Mais sa session sera détruite (en supposant qu'il n'utilise pas Remember Me), donc s'il essaie de se connecter ailleurs, il dira "Désolé, vous êtes toujours connecté".

Y at-il des options dures et rapides pour ce faire ..? Je pensais forcer les utilisateurs à être "Remembered" alors quand il se connecte un booléen "IsReallyOnline" sera mis à vrai et vice versa quand il se déconnecte .. Bien que cette option a ses limites, (les gens se tournent hors cookies, ne pas se déconnecter et fermer le navigateur puis sum1 d'autre vient et le navigateur sur le site et il est connecté etc ....) il semble que le plus viable pour l'instant?

Des suggestions?

Merci à l'avance

Répondre

1

Vous demandez vraiment quelque chose qui ne relève pas de la compétence du web. Le protocole HTTP est par définition sans état, ce qui signifie qu'à tout moment; un serveur n'a jamais besoin de savoir si un client existe toujours. Les mises en œuvre plus récentes/plus anciennes de langages de programmation de serveurs Web (par exemple php/asp.net mvc), pour la plupart, évitent de stocker n'importe quel état concernant des clients connectés/actifs.

Certaines choses à vous poser:

Combien de temps un utilisateur peut être « actif » sur une page sans provoquer postback? Les pages basées sur Javascript peuvent permettre à un utilisateur d'utiliser interactivement une page pendant un certain temps avant qu'un type de publication ne se produise.

Les utilisateurs vont-ils passer par un proxy ou un serveur de cache? Plusieurs demandes d'utilisateurs «différents» peuvent provenir de la même machine dans ce cas.

Votre application sera-t-elle exécutée sur une seule machine ou sur une batterie de serveurs? Vous devez vous assurer que l'équilibrage de la charge (par exemple) ne redirige pas les différents utilisateurs vers des serveurs différents autorisant plusieurs connexions.

Que diriez-vous d'un utilisateur utilisant légitimement deux navigateurs différents sur la même machine? Est-ce que cela est autorisé?

On pourrait suggérer que votre problème ici provient d'essayer d'utiliser la mauvaise technologie en fonction de vos besoins? Peut-être que l'écriture d'une application client qui utilise une connexion directe à vos serveurs serait plus «sécurisée»? (Oui, je comprends que ce soit des tracas énormes, mais si votre exigence d'un utilisateur/une connexion est absolue peut-être que vous pourriez explorer cette avenue?)

Oh bien, une solution web

Pour une http solution centrée, vous pouvez essayer un javascript timer faire une demande à votre serveur toutes les X secondes pour indiquer que la session est toujours active. Tant que le navigateur est ouvert et la connexion réseau valide, vous devriez obtenir ces «pings». La session est maintenue ouverte par le cookie transmis par la requête http.

Vous serez en mesure de coder la page « ping » pour stocker les détails de l'utilisateur soit dans l'objet d'application ou d'un fournisseur d'appartenances de votre choix puis interroger ce fournisseur chaque fois qu'un client tente de se connecter.

Cette nécessite un délai d'attente relativement court sur une session ou un autre mécanisme pour garantir qu'un navigateur en panne ne bloque pas votre utilisateur légitime trop longtemps.

S'il vous plaît noter: Cela va échouer horriblement si l'utilisateur n'a pas javascript activé (Ne supposez pas qu'ils auront!)

1

Option rapide: isOnline magasin comme une session. Vérifiez si la session est vraie, puis autorisez. Si non, ne le permettez pas.

Si l'utilisateur ferme le navigateur, il sera déconnecté en cours de session.

Questions connexes