2008-11-06 6 views
1

Il existe 3 applications Web.problème d'authentification ou bogue

Les sites A et B sont tous deux des configurations d'application Web ASP.NET avec FormsAuthentications et un dossier protégé dans le site B est également configuré correctement dans le fichier web.config. Le site C est un site Web ASP classique qui conserve le statut d'authentification avec Session.

maintenant s'il vous plaît envisager les étapes suivantes:

1, il y a un lien avec target = "_ blank" propriété sur une page du site de A et un lien vers le dossier protégé du site B; 2, cliquez sur ce lien vous devez ouvrir le site B dans une nouvelle fenêtre du navigateur et rediriger vers la page de connexion;

3, connectez-vous avec vos informations d'identification, puis rediriger vers la page normalement protégée, vous pouvez maintenant naviguer sur cette page du site B bien sûr; 4, Maintenant, fermez la fenêtre du navigateur qui affiche la page protégée du site B, vous pouvez cliquer sur le bouton de fermeture du navigateur ou appuyez sur Alt + F4;

5, puis cliquez sur le lien sur le site A à nouveau, maintenant vous pouvez accéder à la page protégée du site B sans vous reconnecter.

6, Il existe également un autre lien avec target = "_ blank" sur une page du site A et un lien vers la page protégée du site C, le site C est un site ASP; 7, ouvrez d'abord la page protégée du site C, connectez-vous est exactement requis; 8, Connexion au site C et vous pouvez bien sûr voir la page protégée, puis fermez le navigateur;

9, Cliquez sur le lien vers le site C à nouveau, vous pouvez vous retrouver déjà authentifié sur le site C.

Oops. il y a déjà 10 étapes, je pense que c'est ennuyeux mais elles me rendent vraiment confus pour quelques jours.

Quelqu'un sait-il à ce sujet? Merci beaucoup.

Répondre

1

ASP et ASP.NET utilisent un cookie de session qui est stocké dans la mémoire du processus du navigateur. Ouverture d'une nouvelle fenêtre de navigateur à partir d'un lien ne démarre pas un nouveau processus ouvre simplement une nouvelle fenêtre appartenant au même processus que la fenêtre d'origine. La fermeture d'une fenêtre ne se déconnecte pas de la session parce que le cookie de session sera toujours dans la mémoire du processus, lorsqu'une autre fenêtre visite le site, le cookie de session existant sera envoyé du point de vue des sites. toujours la même sesssion et c'est l'inférence correcte à dessiner.

Modifier: La question est soulevée dans un commentaire, 'Comment cela serait-il évité'. La meilleure réponse serait: ne l'évitez pas, absorbez-la comme une opération normale et évitez de vous charger d'un tas de problèmes.

Ce que vous demandez est un moyen de détecter qu'aucune fenêtre n'affiche actuellement le contenu d'une application spécifique. C'est vraiment difficile à atteindre. Même si vous n'avez qu'une fenêtre sur une application (qui ne peut pas être garantie), vous devez vous assurer que toutes les pages capturées l'événement onunload sur la fenêtre ont informé le serveur que l'application est déconnectée.

S'il est essentiel que les utilisateurs aient la possibilité de se déconnecter d'une application, il est préférable de fournir un lien de déconnexion sur chaque page dans un en-tête commun comme dans cette page que vous consultez actuellement.

Généralement, une session dans ASP est marquée comme «connectée» en stockant un type de jeton dans l'objet de session. Les pages qui font partie de cette application vérifieront ce jeton et s'il n'est pas présent rediriger vers une page de connexion. Pour se déconnecter, la valeur de la session est supprimée et le client redirigé vers la page de connexion.

Dans ASP.NET FormsAuthentication a SignOut et une méthodes RedirectToLoginPage et Forms Authentication gère la redirection vers la page de connexion automatiquement.

+0

Merci, Anthony. Mais maintenant je veux éviter ce problème. Comment puis-je faire alors? Définir le délai d'expiration des cookies ou d'autres approches? Encore merci. – Shiny

0

Utilisez session.abandoned sur l'événement window.close par exemple.

Créer une fonction qui sera chargée dans l'en-tête et attraper l'événement window.close. N'oubliez pas de vérifier si la page précédente provient du même domaine/IP. Parce que votre utilisateur peut avoir oublié de se déconnecter et d'aller à un autre site Web, puis cliquez sur le bouton de retour ...