Safari’s Cookie-Problem mit Facebook Apps

Es gibt wirklich schöneres, als Apps (innerhalb eines iFrames) für Facebook zu entwickeln. Mangelhafte Dokumentationen der SDK bzw. API von Facebook machen die Sache nicht leichter. Zum Problem:

Safari hat im Gegensatz zu anderen Browsern wie Firefox eine recht restriktive Cookie-Politik, die Drittcookies per default verbietet. Befindet man sich mit einer App innerhalb eines iFrames in Facebook und ruft einen Link (mit target _self) auf, verliert Facebook aufgrund des nicht gesetzten Cookies den Login und versucht eine neue Session zu öffnen, wobei der iFrame verloren geht und die App außerhalb von Facebook neu aufgerufen wird. Dies geschieht zum Beispiel, wenn man Informationen wie Facebook-ID oder E-Mail-Adresse des Users innerhalb der App transportieren möchte.

Im Web finden sich hierzu etliche Workarounds, die allerdings nur teilweise funktionieren und vor allen Dingen lästig zu implementieren sind. Ich habe eine Möglichkeit mit einer .htaccess-Datei gefunden, die zuverlässig zu funktionieren scheint:

#http://www.w3.org/P3P/validator.html
<IfModule mod_headers.c>
Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"NOI DSP COR NID CUR ADM DEV OUR BUS\""
Header set Set-Cookie "test_cookie=1"
</IfModule>

Der P3P-Header ist für den IE nötig. Header set Set-Cookie "test_cookie=1" löst das Problem in Safari. Zusätzlich muss man das Verzeichnis w3c erstellen, hier gehören p3p.xml und policy.xml hinein. Weitere Informationen zu P3P gibt es hier.