/ / Sessões em PHP do aplicativo de tela iFrame do Facebook / Facebook - Facebook, Internet Explorer, Session, Iframe, Safari

Facebook iFrame canvas app edição de sessões PHP - facebook, internet-explorer, sessão, iframe, safari

Estou trabalhando em um problema há um dia e meio e ainda não encontrei uma solução.

Ao visitar meu jogo no facebook (que está no iFrame do facebook), as sessões de php não funcionam. Isso é para o IE e o Safari. Chrome funciona bem.

Eu já li todas as postagens na pilha sobreesse problema, que parece estar relacionado à segurança de cookies de terceiros e que precisa de interação com o iFrame primeiro. Houve uma solução alternativa ao fazer o javascript postar alguns dados de formulário no iFrame primeiro, mas isso parece ter sido "corrigido" nas versões mais recentes dos navegadores muito recentemente, pois isso não funciona mais.

Até tentei implementar uma página inicial que exigisse que eles clicassem em um link primeiro (no iFrame) para carregar outra página que criaria a sessão. Mas mesmo isso não funciona.

Também estou tendo problemas para carregar novas páginas no iFrame usando javascript, o que parece sempre causar atualizações infinitas de loop.

E não, cabeçalhos P3P NÃO o resolvem.

Alguém tem uma solução para este problema? Não posso ser o único, considerando quantos aplicativos de facebook existem!

Respostas:

5 para resposta № 1

Me deparei com esse problema usando um cliente quedesativou "Aceitar cookies de terceiros". Minha solução foi forçar o PHP a incorporar o ID da sessão no URI, colocando esta linha no início de cada página:

ini_set("session.use_trans_sid", true);

Como os URLs estão em iframe no Facebook, o SID não é visto na janela superior.


3 para resposta № 2

Para o IE, você precisará do conjunto de cabeçalhos P3P. Algo como:

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

O Safari bloqueia cookies de terceiros por padrão. Atualmente, a única solução alternativa que está funcionando para mim é "abrir" uma nova janela para definir os cookies. Eu tenho algo parecido com isto:

<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>

E safari.php terá o seguinte:

<?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: Isso não funcionará se os usuários tiverem "bloquear pop-ups" ativados no Safari. Se alguém tiver uma solução melhor para isso, informe-me;)