Facebook Development – Internet Explorer, Cookies und iFrame’s
Na klasse! Da hat man seine App fertig und macht nochmal die obligatorischen Browser-Tests und dann das: Der IE weigert sich standhaft den Auth-Cookie zu setzen. Ich habe wirklich lange nach einer Lösung suchen müssen.
Das Problem ist folgendes:
Die Sicherheits-Einstellungen des Internet Explores verbieten das Setzen eines Cookies Innerhalb eines IFrames (nichts anderes ist ja das Facebook Canvas). Ich habe mir daraufhin andere Facebook-Apps angeschaut und tatsächlich: Selbst so bekannte Anwendungen wie “Mafia Wars” bleiben in der Authentifizierungs-Schleife hängen.
Abhilfe schafft das Setzen des Cookies explizit zu erlauben. Dies geschieht über das “Devil Eye” in der Statusleiste des IE. Für die meisten Benutzer ist das aber keine wirklich praktikable Lösung.
Es geht aber auch anders.
Mittels des sogenannten P3P-Headers kann man eine “Privacy-Policy” setzen, die es der eingebetteten Seite erlaubt, einen Cookie zu speichern. Dies erfolgt durch das Senden eines Header Feldes “P3P” mit folgendem Inhalt:
CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT
Dann klappt es auch mit dem Internet Explorer.
Dies kann entweder per PHP, Python oder durch den Apache Webserver geschehen. Dazu muss die .htaccess nur um folgende Zeilen erweitert werden:
<IfModule mod_headers.c>
<Location />
Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
</Location>
</IfModule>
Doch was bedeuten diese Zeilen? Unter p3pwriter.com gibt es ein Schlüssel-Verzeichnis. Zum Beispiel steht “DEVi” für:
“Information may be used to enhance, evaluate, or otherwise review the site, service, product, or market. Opt-in means prior consent must be provided by users.”
Ich habe keine Ahnung, wie verpflichtend diese Policy ist und ob es rechtliche Konsequenzen hat, diese zu brechen. Jedenfalls bin ich docherstaunt, das Facebook diese Problematik anscheinend egal ist und nirgendwo eine Hilfestellung zu diesem Problem anbietet.