Ich habe Facebook Dokumentation über Canvas-Anwendungen lesen und stieß auf eine Beispielanwendung: http://developers.facebook.com/docs/samples/canvas. Als ich aber ihr Beispiel durchlas, war ich sehr verwirrt über die Verwendung von Cookies in der iframe-Anwendung.Wie setzt Facebook Cross-Domain-Cookies für iFrames auf Canvas-Seiten?
Ein wenig Hintergrund ...
ich bereits um gespielt hatte iframes für eingebundene Widgets (in keinem Zusammenhang mit Facebook) und ich fand heraus, ein paar Browser (Chrome, Safari, etc.) hat strenge Cookie Richtlinien bei der Verwendung und Cross-Domain-Cookies dürfen nicht in Iframes gesetzt werden (Firefox hingegen erlaubt Iframes, Cross-Domain-Cookies in Iframes zu setzen). Wenn beispielsweise foo.com einen iframe mit src="http://bar.com/widget"
hat, kann das iframe-Widget keine Cookies für bar.com setzen und hat daher Probleme mit dem persistenten Status im iframe: bar.com interpretiert jede Anfrage (einschließlich Ajax-Anfragen) aus dem Widget als eine neue Anfrage ohne eine etablierte Sitzung. Ich kämpfte und fand einen Weg um dies mit JSONP und Javascript, um Cookies für foo.com stattdessen setzen ...
... und so?
Nun, ich schaute auf die Beispiel-Leinwand iframe Facebook-Anwendung und ich bemerkte, dass ihre Anwendung (gehostet auf runwithfriends.appspot.com) in der Lage ist, einen Cookie, u
, mit der aktuellen Benutzer-ID zusammen mit ein paar anderen Parameter für die Domäne runwithfriends.appspot.com. Es sendet diesen Cookie mit jeder Anfrage ... und es funktioniert in Chrome und Firefox! WTF? Wie kommt Facebook zu den Cross-Domain-Cookie-Einschränkungen für Chrome?
(ich weiß die Antwort schon jetzt, aber ich dachte, das könnte hilfreich sein für alle, die gleiche Sache, um herauszufinden, zu kämpfen -. Ich werde die Antwort unten schreiben)
Update: die neuesten Versionen einiger Browser (Safari v6.x + unter OS X, Safari unter iOS 6+, und ich nehme an, Chrome und FF bald) erlauben keine Einstellung von Cross-Domain-Cookies mehr, auch bei Post-zu-Iframe-Anfragen. –