Cookies, iFrames e Internet Explorer

Estos días en Vancast hemos estado luchando (por enésima vez) con Internet Explorer y su manía de funcionar totalmente diferente al resto de navegadores.
Esta vez el problema nos lo hemos encontrado cuando intentávamos incluir dentro de un iframe la ejecución de una aplicación externa.

 Esta práctica es cada vez más común. En la nueva era de las redes sociales, parece que todos tienen que estar conectados con todos, y a las aplicaciones web les pasa lo mismo. El caso más representativo son las Apps de Facebook, que no dejan de ser aplicaicones hechas y alojadas por externos a Facebook que se visualizan dentro del marco de la red social gracias al tag iframe; y junto con la GraphAPI (tengo intenció de dedicarle un post a este tema) el usuario tiene la sensación de que todo es la misma cosa.

En nuestro caso queríamos que un CMS como wordpress pudiéra incluir contenidos Webcast producidos por nuestra plataforma vancast webcasting studio. La clave era realizar un sistema de llamada a nuestro player generando una url de acceso directo. Con esta URL podíamos crear un tag iframe dentro de un post y haríamos creer a los usuarios que el webcast está siendo reproducido por wordpress.

La implementación del acceso fue sencilla, lo probamos en FireFox y Chrome y funcionaba perfectamente. Pero al probarlo con Internet Explorer 9 (y anteriores) ¡fracaso!. No entendíamos porqué no funcionaba, hasta que comprendimos que la cookie que intentaba leer nuestro player rich media no existía. Internet Explorer estaba bloqueando la creación de cookies por nuestra aplicación si se embedía en un iframe.
Una simple búsqueda en Google nos iluminó y entendimos el problema. Internet Explorer clasifica las ejecuciones por tres niveles First-party, Second-party y Third-party. La ejecución de una aplicación dentro de un iframe se considera third-party y la configuración standrard el Internet Explorer bloquea cualquier acción que considere invasiva, entre las cuales está la creación de cookie.

Gracias a este post pudimos solucionar el problema. El caso es que mediante el header de la llamada HTTP podemos decirle a Internet Explorer que somos un sitio de confianza. Meidante la insercción del siguiente código en cada PHP que necesite leer o escribir. cookies:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

Es importante tener en cuenta que cada programa que vaya a trabajar con cookies incluya en su cabezera el meta P3P para que Internet Explorer confíe en nuestra aplicación.

Este post está firmado por:
Marçal Machado Chaiben y Carles Galan Cladera

Advertisements

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s