35 votes

IE8 perd les cookies de session dans les fenêtres contextuelles

Nous avons une application ASP.NET qui utilise Forms Auth. Lorsque les utilisateurs se connectent, un cookie d'identification de session et un ticket Forms Auth (stocké sous forme de cookie) sont générés. Il s'agit de cookies de session, et non de cookies permanents. Il est intentionnel et souhaitable que lorsque le navigateur se ferme, l'utilisateur soit effectivement déconnecté.

Une fois que l'utilisateur s'est connecté, une nouvelle fenêtre s'ouvre en utilisant la fonction window.open('location here'); . La page qui s'ouvre est en fait l'espace de travail dans lequel l'utilisateur travaille pendant le reste de sa session. D'autres fenêtres contextuelles sont également utilisées à partir de cette page.

Dernièrement, un certain nombre de clients (utilisant tous les dernières versions d'IE8) se sont plaints que, lorsqu'ils se connectent, la fenêtre contextuelle initiale les ramène à l'écran de connexion plutôt qu'à leur page d'accueil. Par ailleurs, les utilisateurs peuvent parfois se connecter, arriver sur la page d'accueil (qui se trouve à nouveau dans une nouvelle fenêtre pop-up), et tout semble bien se passer, jusqu'à ce que d'autres fenêtres pop-up soient créées, et qu'elles les redirigent à nouveau vers l'écran de connexion.

Pour tenter de résoudre le problème, j'ai utilisé le bon vieux Fiddler. Lorsque le problème a commencé à se manifester, j'ai remarqué que le navigateur n'envoyait pas le cookie de session ASP.NET session ID OU le cookie de session Forms Auth ticket, même si la réponse au POST de connexion pousse clairement vers le bas ces cookies.

Le plus étrange, c'est que si je fais CTRL+N pour ouvrir une nouvelle fenêtre à partir de la fenêtre qui s'est affichée et qui ne contient pas les cookies de session, puis que je tape manuellement l'URL de la page d'accueil, ces cookies réapparaissent comme par magie. Cependant, les window.open(); continueront à être interrompus, à ne pas envoyer les cookies de session et à renvoyer l'utilisateur à l'écran de connexion.

Il est important de noter que parfois, sans raison apparente, ces mêmes utilisateurs peuvent soudainement se connecter et travailler normalement pendant un certain temps, avant de retomber en panne.

Je me suis assuré qu'aucun module complémentaire de navigateur, plug-in, barre d'outils, etc. n'est en cours d'exécution. J'ai ajouté notre site en tant que site de confiance et réduit les paramètres de sécurité à Faible, j'ai modifié la politique de confidentialité des cookies en "acceptant tout" et j'ai même désactivé les paramètres automatiques de la politique, en la forçant manuellement à tout accepter et à inclure les cookies de session. Rien ne semble l'affecter.

Notez également que l'application web réside sur un seul serveur. Il n'y a pas d'équilibrage de charge, de jardins web, de fermes de serveurs, de grappes, etc. Le serveur se trouve derrière un serveur ISA, mais à part cela, c'est assez simple.

J'ai cherché pendant des jours et je n'ai rien trouvé d'exploitable. Parfois, je n'arrive même pas à reproduire le problème de manière fiable. J'ai trouvé quelques références à des personnes ayant ce même problème, mais elles semblent faire référence à un problème qui a été prétendument corrigé dans une version bêta ou RC (exemple : IE8 perd des cookies lors de l'ouverture d'une nouvelle fenêtre après une redirection ). Il s'agit des versions d'IE les plus récentes, avec les correctifs les plus récents.

Je sais que je peux essayer d'installer des cookies permanents au lieu de cookies de session. Cependant, cela a des conséquences dramatiques sur la sécurité de notre application.

Mise à jour

Il semble que le problème disparaisse automatiquement lorsque l'utilisateur est ajouté en tant qu'administrateur local sur la machine. Seul l'avenir nous dira si ce changement a une incidence permanente (et positive) sur ce problème.

Il est temps de sortir ProcMon et de voir s'il y a un problème d'accès aux ressources.

Mise à jour n°2

Il semble qu'il y ait plusieurs angles d'attaque pour ce qui semble être un problème unique. J'ai signalé il y a longtemps que le fait de faire de l'utilisateur un administrateur local semblait aider. Et c'est ce qui s'est passé pour un certain nombre d'utilisateurs. Bien sûr, ce n'est pas vraiment une solution, mais cela nous a permis d'avancer.

Ensuite, de plus en plus d'utilisateurs ont commencé à signaler le problème, et le correctif de l'administrateur n'a pas aidé. Les utilisateurs semblaient être principalement des utilisateurs de Win7, mais Vista était également touché. Il s'agissait aussi principalement d'installations 64 bits.

Le réglage de TabProcGrowth sur 0 ou 1 (l'un ou l'autre a fonctionné), comme l'ont suggéré certains membres ci-dessous, semble avoir largement résolu le problème. Je vais donc transférer ma réponse acceptée à la première personne qui l'a suggérée, car elle a eu beaucoup plus d'impact.

Il s'agit d'un problème incroyablement frustrant à résoudre, car il est difficile à reproduire et se produit souvent avec des utilisateurs avec lesquels je n'ai pas de communication directe, ou le temps que j'arrive à les joindre, il ne semble pas fonctionner. Tout ce que je peux dire, c'est que quelque chose ne va pas avec la fonction de fusion de sessions, mais je n'ai pas beaucoup de données à fournir à Microsoft pour trouver une solution permanente.

16voto

Il s'agit d'une "nouvelle" fonctionnalité dans IE8 !

Consultez le blog IE8 ci-dessous pour en savoir plus.

http://blogs.msdn.com/askie/archive/2009/03/09/opening-a-new-tab-may-launch-a-new-process-with-internet-explorer-8-0.aspx

IE8 peut utiliser plusieurs processus pour gérer un nombre x de fenêtres IE. Lorsque vous traversez un espace de processus, vous perdez vos cookies (l'identifiant de session Asp.Net semble être conservé au-delà de cette limite de processus).

Personnellement, je pense qu'il s'agit d'une erreur ou d'un bogue. Comme nous le savons, lorsque l'on navigue vers le "même domaine cible", les cookies doivent être conservés et renvoyés. Le fait qu'IE8 ait un comportement différent en matière de sécurité Super ! Le fait qu'il se comporte mal et qu'il "laisse tomber les cookies même s'il va dans le même domaine cible dans une autre fenêtre" n'est qu'un bug à mon avis.

Vous pouvez modifier le nombre de processus utilisés par IE8 via les options de l'explorateur internet ehh en modifiant un paramètre de registre !!!!!! (c'est ce qui en fait un bogue à mon avis. Le fait qu'IE fournisse une interface utilisateur pour modifier ces paramètres le rendrait "acceptable au niveau de l'entreprise".

Regarder,

Marvin Smit

6voto

Vineet Reynolds Points 40529

Il y a de multiples possibilités derrière cela -

  • UAC et Vista (Il fallait recadrer !!). Plus précisément, recherchez le comportement du mode protégé.
  • Il peut s'agir d'un problème réel avec le Fonctionnalité de fusion de sessions dans IE8 . D'autant plus que l'ouverture d'une nouvelle fenêtre via le Ctrl+N permet d'envoyer les cookies comme par magie dans votre cas.
  • Un problème avec une ancienne version d'IE (je sais que vous avez déclaré que vos clients utilisent la dernière version). Vous pouvez vérifier les détails disponibles sur Microsoft Connect pour les identifiants de bogues. 408806 y 392032 .

3voto

Shayne Points 93

Nous avons résolu ce problème en fixant à 0 la valeur de l'option "Set tab process growth".

Cependant, nous n'avions pas activé le mode protégé et la zone était "Intranet". Il s'agit manifestement d'un problème/bogue avec Windows 7 64Bit, comme d'autres l'ont indiqué.

Cette page (#4) m'a conduit à la solution : http://blog.httpwatch.com/2009/04/07/seven-things-you-should-known-about-ie-8/

2voto

Cyde Weys Points 126

Près que je peux dire, un autre changement de cookies à travers les onglets juste allé vivre dans cette mise à jour de sécurité à partir du 12 novembre 2013, qui est la rupture de la fonctionnalité dans notre application dans toutes les versions de IE. Nous faisons OpenID auth dans une fenêtre pop-up afin de ne pas avoir de rediriger l'utilisateur à l'écart de la page de navigation, quand ils ont d'abord cliqué sur le lien de Connexion. Le cookie de session pour la connexion est correctement d'être envoyé dans la requête dans la fenêtre pop-up, mais elle n'est jamais vu par la fenêtre principale du navigateur, de sorte que la prochaine demande au serveur n'est pas ce cookie de session sur elle comme il se doit, et ainsi de journalisation dans le jamais fait, il fonctionne.

Quelqu'un a une solutions possibles à cela?

1voto

Je connais ce problème depuis IE 5, c'est pourquoi je n'utilise les variables de session que dans les fenêtres pop-up modales... Lorsque j'ouvre une fenêtre pop-up non modale, je remplace toutes les variables de session par le cache ASP.NET et les nouvelles collections d'objets... Mais c'est très fastidieux !

D'autres navigateurs (par exemple Firefox) n'ont pas ce problème...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X