68 votes

Comment Facebook définit-il les cookies interdomaines pour les iFrames sur les pages de canvas?

J'ai été la navigation sur Facebook la documentation de la lecture sur toile applications et je suis tombé sur un exemple d'application: http://developers.facebook.com/docs/samples/canvas. Comme je l'ai lu à travers leur exemple, cependant, je suis très confus au sujet de leur utilisation de cookies dans l'iframe de l'application.

Un peu d'histoire...

J'avais déjà joué un peu avec l'aide des iframes pour intégrable widgets (sans rapport avec Facebook) et je l'ai trouvé un peu de navigateurs (Chrome, Safari, etc.) stricte cookie de politiques et de ne pas permettre à la croix-domaine les cookies installés dans des iframes (Firefox, d'autre part, permet à des iframes pour définir la croix-domaine des cookies dans les iframes). Par exemple, si foo.com a un iframe avec src="http://bar.com/widget" l'iframe widget ne sera pas en mesure de définir des cookies pour bar.com et, par conséquent, aura de la difficulté à la persistance de l'état à l'intérieur de l'iframe: bar.com va interpréter chaque requête (y compris les requêtes ajax) à partir du widget comme une nouvelle demande sans la mise en place de la session. J'ai lutté, et a trouvé un moyen de contourner cela en utilisant JSONP et javascript pour créer des cookies pour foo.com au lieu de cela...

... et alors?

Eh bien, j'étais à la recherche, à l'exemple de toile iframe Facebook application et j'ai remarqué que leur application (hébergé sur runwithfriends.appspot.com) est en mesure de définir un cookie, u, avec le courant id de l'utilisateur ainsi que quelques autres paramètres de l'runwithfriends.appspot.com domaine. Il envoie ce cookie à chaque requête... et il fonctionne dans Chrome et Firefox! WTF? Comment Facebook obtenir autour de la croix-domaine de cookie restrictions sur Chrome?

(Je connais déjà la réponse maintenant, mais j'ai pensé que cela pourrait être utile pour quiconque de la difficulté à comprendre la même chose -- je vais poster la réponse ci-dessous.)

70voto

Aaron Gibralter Points 1751

Ainsi, l’iFrame ne définit pas le cookie u pour le domaine runwithfriends.appspot.com. Facebook crée un formulaire, <form action="runwithfriends.appspot.com/..." target="name_of_iframe" method="POST"> et utilise javascript pour soumettre le formulaire au chargement de la page. Puisque la cible du formulaire est l'iframe, il ne recharge pas la page ... il charge simplement l'iframe avec la réponse du POST. Apparemment, même les navigateurs Chrome et autres appliquant des règles de cookies strictes définissent des cookies pour les requêtes interdomaines, s'il s'agit de requêtes POST ...

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