2012-04-11 5 views
5

He estado trabajando en un problema durante el último día y medio y todavía no he encontrado una solución.Facebook iFrame canvas app Número de sesiones PHP

Al visitar mi juego en Facebook (que está en el iFrame de Facebook) las sesiones de PHP no funcionan. Esto es para IE y Safari. Chrome funciona bien.

Ya he leído todas las publicaciones en la pila sobre este problema, que parece ser responsabilidad de la seguridad de cookies de terceros y que primero necesitan interacción con el iFrame. Hubo una solución al hacer que javascript publique algunos datos de formularios en el iFrame primero, pero esto parece haber sido "reparado" en las últimas versiones de los navegadores muy recientemente ya que esto no funciona.

Incluso intenté implementar una página de inicio que requeriría que hagan clic primero en un enlace (en el iFrame) para cargar otra página que luego crearía la sesión. Pero incluso ESO no funciona.

También estoy teniendo problemas incluso para cargar nuevas páginas en el iFrame usando javascript, que parece causar siempre actualizaciones infinitas de bucle.

Y no, los encabezados P3P NO lo resuelven.

¿Alguien tiene una solución a este problema? No puedo ser el único con eso, considerando cuántas aplicaciones de Facebook existen.

+0

¿tiene la política correcta de p3p? Tengo muchas aplicaciones de FB y los problemas de sesión siempre se resolvieron con los encabezados de p3p correctos – scibuff

+0

¿Incluso para safari? ¿Puedes darme un ejemplo de tu encabezado? Creo que enchufé: header ('p3p: CP = "NOI ADM DEV PSAi COM NAV NUESTRO STP IND DEM"'); en vano. –

Respuesta

5

Me encontré con este problema al utilizar un cliente que tenía "Aceptar cookies de terceros" deshabilitado. Mi solución era forzar PHP para incrustar el identificador de sesión en el URI al poner esta línea en el inicio de cada página:

ini_set('session.use_trans_sid', true); 

Como las URLs están en marco flotante dentro de Facebook el SID no se ve en la ventana superior.

+0

También he estado luchando con este problema, y ​​esta respuesta me llevó a descubrir que tenía "Aceptar cookies de terceros" también desactivadas. Esto parece ser un gran problema potencial para todos, así que me sorprende que esto no se mencione en ningún lugar de Facebook u otros tutoriales. – Zimzat

3

Para IE, necesitará el conjunto de encabezados P3P. Algo como:

<?php header('P3P: CP="CAO PSA OUR"'); ?> 

Safari bloquea las cookies de terceros de manera predeterminada. Actualmente, lo único que funciona para mí es "abrir" una nueva ventana para establecer las cookies. Tengo algo como esto:

<script type="text/javascript"> 
    function safariFix(){ 
     if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1){ 
      window.open('https://yourdomainname.com/safari.php', 'Safari Fix','width=100,height=100'); 
     } 
    } 
</script> 

Y safari.php tendrá esto:

<?php 
setcookie("safari_test", "1"); 
?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>Safari Fix</title> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
    </head> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     window.close(); 
    }); 
    </script> 
    <body> 
     Since Safari does not accept third-party cookies by default, we are forced to open this window. 
     This window will automatically close once we have set the cookies. 
    </body> 
</html> 

PROBLEMA: esto no funcionará si los usuarios tienen "Bloquear ventanas emergentes" habilitadas en Safari. Si alguien tiene una mejor solución para esto, infórmeme)