web-dev-qa-db-fra.com

IE 11 cookies de session propriétaires perdus dans iframe

Nous avons un site (www.example.com) qui envoie les utilisateurs vers une série de pages tierces pour vérifier les détails du paiement, ce que nous faisons dans un iframe. Initialement, une page locale de www.example.com est chargée dans l'iframe et l'utilisateur est redirigé vers l'URL tierce. Une fois que les étapes tierces sont terminées par l'utilisateur, elles sont 302 redirigées vers une page de notre site (www.example.com) dans l'iframe.

Cela fonctionne dans tous les navigateurs que nous avons testés, sauf IE 11, où nos cookies semblent être perdus. Nous avons vérifié cela sous Windows 7 et 8.1, en modes bureau et "Metro", et le problème concerne toutes les versions.

Lorsqu'un utilisateur navigue sur notre site, nous définissons un cookie de session, qui est correctement envoyé à la page propriétaire qui est initialement chargée dans l'iframe. Cependant, une fois que l'utilisateur a parcouru certaines pages tierces dans cet iframe, le cookie de session n'est pas envoyé avec la prochaine demande.

Si nous définissons le paramètre de confidentialité de IE 11 sur la valeur la plus basse, ce problème disparaît et les choses fonctionnent comme prévu.

Toutes les solutions potentielles que j'ai trouvées jusqu'à présent concernent les en-têtes P3P. Nous avons un en-tête P3P valide et correct et un fichier de stratégie XML configuré, et ce problème se produit uniquement dans IE 11.


Mise à jour: Nous avons quelques autres cookies définis en utilisant JS. Tout cela persiste comme prévu. Les différences sont la date d'expiration (1 an pour les cookies JS, 1 mois pour le cookie de session), le domaine (explicitement "example.com" pour les cookies JS, vide pour le cookie de session) et s'ils sont "HTTP uniquement" (faux pour JS cookies, vrai pour le cookie de session).

J'ai essayé de définir toutes ces options selon les cookies JS pour le cookie de session, mais cela n'a fait aucune différence.


pdate 2: Après plus de tests, je n'ai pas pu créer un cas de test qui recrée ce problème. Tous les cookies supplémentaires avec lesquels j'essaie de tester dans le code en direct semblent également être rompus, même s'ils sont définis avec exactement le même code que les cookies JS qui fonctionnent. En bref; Je n'ai pas encore trouvé de modèle pour les cookies qui fonctionnent et ceux qui ne fonctionnent pas.

Une chose potentiellement intéressante à noter est que les cookies ne sont pas supprimés, ils ne sont tout simplement pas envoyés à la demande finale. Si une autre page est chargée, les cookies réapparaissent comme par magie et sont envoyés; ce qui m'amène à croire qu'il s'agit d'un bug entourant les iframes et P3P.


Mise à jour 3 (jour 3): IE 11 continue de me confondre. Plus je voyage dans le labyrinthe de Microsoft, plus je me perds parmi ses murs changeants. Et il y a des fantômes ici. Des fragments de politiques de sécurité à moitié rêvées qui se sont tissées dans une créature éthérée, qui me suit et me nargue à chaque mouvement. la vue, mais à chaque heure qui passe, je trouve plus de réconfort dans la simple connaissance de sa proximité. Serait-ce la bête même que j'ai été envoyée ici pour affronter? Comment pourrais-je tuer mon seul compagnon dans ces moments-là?

66
Jaik Dean

Nous avons rencontré un problème similaire avec Internet Explorer 11 où le cookie de session a disparu après une redirection sur https.

La chaîne de demande ressemblait à ceci:

demande initiale à / -> ensemble de cookies de session -> rediriger vers une URL externe -> = rediriger (cookie de session perdu)

Notre problème était dû à un nom d'hôte non valide selon RFC952 , nous avions des traits de soulignement dans l'URL de notre serveur de test. Il semble qu'Internet Explorer supprime silencieusement le cookie de session lors de la redirection via https si l'URL n'est pas conforme à RFC952. Lorsque vous utilisez des tirets au lieu de traits de soulignement, tout fonctionne comme prévu.

La solution d'origine a été trouvée dans la section Update 2 de cette asp.net blogpost de 2004. Ticket de bogue Microsoft associé - ici.

J'espère que cela aidera quelqu'un.

8
OakNinja

J'ai remarqué que les cookies de session sont souvent perdus lorsque le mode de compatibilité IE7 est activé pour une nouvelle page. Je suppose que la même chose pourrait s'appliquer à l'iframe. L'iframe envoie-t-il une valeur d'en-tête compatible X-UA différente de la page parente ou différente de celle antérieure à la session? Comme peut-être que votre session a commencé avec IE = Edge, et la page iframe la définit sur IE = 7. Si c'est le cas, IE semble faire tourner un nouveau IE PID pour les pages du mode de compatibilité et les cookies de session souvent (mais il ne semble pas être transféré).

1
Ray Darrow