2011-02-01 3 views
0

Je sais que ce sujet a été largement couvert, mais je suis totalement coincé et a besoin d'une direction et de nouvelles opinions. J'ai une application Facebook iFrame qui fonctionne parfaitement dans IE6,8, Safari, Chrome, FF, etc. Seul IE7 me donne du chagrin.Application Facebook iFrame - IE7 ne permettant pas les cookies

J'ai créé un fichier de stratégie P3P et son fichier XML associé. La stratégie est entièrement validée avec le validateur de stratégie P3P.

Dès que l'iFrame est chargé depuis Facebook, l'icône yeux rouges apparaît et lorsque je clique dessus, il signale que les cookies du domaine iFrame sont bloqués. J'ai confirmé que le paramètre de confidentialité "moyen" par défaut est défini sur IE7. Il est intéressant de constater qu'en supprimant Google Analytics, la page se charge au départ sans bloquer les cookies, mais dès que la page est rechargée ou que l'utilisateur se connecte, les cookies sont à nouveau bloqués même si l'en-tête P3P est envoyé immédiatement. page. Tous les actifs sont envoyés via S3, il ne devrait donc pas y avoir de problèmes.

FYI, voici mon fichier P3P; J'ai essayé les chemins absolus, les chemins relatifs, l'ordre de commutation de CP et policyref, et séparé les deux dans des appels d'en-tête séparés sans chance. J'ai confirmé que l'en-tête P3P est envoyé et reçu par le navigateur. J'ai ajouté un tag META p3p à la page HTML. J'ai supprimé toutes les redirections. Le problème persiste toujours. J'ai passé tellement de temps à regarder ça, et maintenant je n'ai plus d'idées. Toute idée ou idée sur la façon d'aborder cette question d'un point de vue nouveau serait grandement appréciée. J'utilise PHP 5.3.5 sur NGINX. Aucun cadre utilisé ...

Répondre

0

J'ai eu le même problème. Facebook iframe app a bien fonctionné dans tous les navigateurs sauf IE7. Lorsque vous êtes allé à l'application, il est très bien chargé. Mais lorsque vous avez cliqué sur un lien, la page est correctement chargée, mais après une seconde environ, le navigateur est actualisé et redirigé. En fin de compte, vous venez d'avoir une page blanche. J'ai également eu l'icône des yeux rouges bloquant les cookies.

Le coupable avéré être le code javascript qui charge le javascript facebook lib:

FB.init({ 
      appId : '<?=FACEBOOK_APP_ID?>', 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true // parse XFBML 
     }); 

Pour résoudre le problème, je changé de statut: vrai, à l'état: false. Maintenant, lorsque vous cliquez sur des liens, la page se charge et ne s'actualise pas.

Donc, ce qui se passe vraiment ici, je ne suis pas sûr, mais j'ai une supposition ... La redirection était causée par le FB javavascript vérifiant l'état de connexion et pour une raison quelconque, pensant que l'utilisateur était déconnecté page de connexion. Je suppose que le script de connexion côté serveur verrait que vous vous êtes connecté et que vous êtes redirigé vers l'application. Donc, et ainsi de suite.

Donc le problème de IE7 ne réglant pas les cookies mis à l'intérieur de l'iframe existe toujours, l'œil diabolique reste. Mais tant que les liens à l'intérieur de votre iframe font référence à la fenêtre parent target = "_ top" pointant vers la page de toile facebook, il semble que vous n'ayez pas besoin du cookie de toute façon. Le SDK PHP recherche la session dans un certain nombre d'endroits en commençant par $ _REQUEST. Je suppose que lorsque facebook charge l'iframe, il inclut le paramètre de session dans la chaîne de requête. Par conséquent, même si les cookies ne fonctionnent pas dans IE7 via iframe, les scripts de votre serveur les obtiendront toujours à partir du paramètre de requête.

J'espère que cela a un sens, je ne comprends pas tout à fait, mais il a corrigé mon application.

+0

Salut Peter: très intéressant, merci pour votre explication. Malheureusement, nos demandes sont faites via AJAX, donc les rafraichissements ne sont pas une option. Ce que nous avons finalement fait était stocker les données nécessaires dans un objet JSON, et validé ces données lors de la soumission si nous avions une session valide, et autrement (ie7), soumis les données. Étant donné que l'application n'était disponible que pour une courte période, nous n'étions pas trop préoccupés par les données falsifiées. Nous utilisons également le SDK JS pour tuer les sessions non valides (de manière unique puisque les cookies de statut FB sont gérés par leur domaine), donc nous n'avons pas pu utiliser cette route pour cette raison également. – Tyler

0

Je ne sais pas mais peut-être que cela aidera, cela a fonctionné comme un charme sur mon application.

header('P3P: CP="CAO PSA OUR"'); 
ob_start(); 
session_start(); 
Questions connexes