Ich habe in der Facebook-Dokumentation nach Canvas-Anwendungen gesucht und bin auf eine Beispielanwendung gestoßen: http://developers.facebook.com/docs/samples/canvas . Als ich ihr Beispiel durchlas, war ich jedoch sehr verwirrt über die Verwendung von Cookies in der iframe-Anwendung.
Eine kleine Hintergrundgeschichte ...
Ich hatte bereits mit der Verwendung von Iframes für einbettbare Widgets (ohne Bezug zu Facebook) herumgespielt und festgestellt, dass einige Browser (Chrome, Safari usw.) strenge Cookie-Richtlinien haben und keine domänenübergreifenden Cookies in Iframes (Firefox, Auf der anderen Seite können iframes domänenübergreifende Cookies in iframes setzen. Wenn foo.com beispielsweise einen Iframe mit src="http://bar.com/widget"
dem Iframe-Widget hat, kann es keine Cookies für bar.com setzen und hat daher Probleme, den Status innerhalb des Iframes beizubehalten: bar.com interpretiert jede Anfrage (einschließlich Ajax-Anfragen) von das Widget als neue Anfrage ohne etablierte Sitzung. Ich kämpfte und fand einen Weg, dies zu umgehen, indem ich stattdessen JSONP und Javascript verwendete, um Cookies für foo.com zu setzen ...
... und so?
Nun, ich habe mir die Beispiel-Canvas-iframe-Facebook-Anwendung angesehen und festgestellt, dass ihre Anwendung (gehostet auf runwithfriends.appspot.com) ein Cookie u
mit der ID des aktuellen Benutzers und einigen anderen Parametern für runwithfriends setzen kann. appspot.com Domain. Es sendet dieses Cookie bei jeder Anfrage ... und es funktioniert sowohl in Chrome als auch in Firefox! WTF? Wie umgeht Facebook die domänenübergreifenden Cookie-Einschränkungen in Chrome?
(Ich kenne die Antwort bereits jetzt, aber ich dachte, dies könnte für jeden hilfreich sein, der Schwierigkeiten hat, dasselbe herauszufinden - ich werde die Antwort unten veröffentlichen.)
quelle
Antworten:
Der iFrame setzt also nicht wirklich das
u
Cookie für die Domain runwithfriends.appspot.com. Facebook erstellt ein Formular<form action="runwithfriends.appspot.com/..." target="name_of_iframe" method="POST">
und verwendet Javascript, um das Formular beim Laden der Seite zu senden. Da das Ziel des Formulars der Iframe ist, wird die Seite nicht neu geladen. Es wird nur der Iframe mit der Antwort des POST geladen. Anscheinend setzen sogar Chrome und andere Browser mit strengen Cookie-Richtlinien Cookies für domänenübergreifende Anfragen, wenn es sich um POST-Anfragen handelt ...quelle