FB选项卡页面应用程序和会话的safari错误


FB tab page aplication and safari bug of session

我有个问题。。

我试着写一个像facebook页面标签应用程序这样的程序。我必须使用会话来记住签名请求。

但问题是Safari不记得会话。

程序为:

$facebook = new Facebook($config);
      if (isset($_REQUEST['signed_request'])) {
            $encoded_sig = null;
            $payload = null;
            list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
            $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
            $signed_request = json_decode(base64_decode(strtr($payload, '-_', '+/'), true),true);
            $op=True;
        }else {
            $op=False;
        }
if($op)
{
  $_SESSION['liked']=$signed_request['page']['liked'];
  $_SESSION['admin']=$signed_request['page']['admin'];
}else{
  $url="PAGEAPP URL";
  echo("<script> top.location.href='" . $url . "'</script>");
  exit();
}

Safari不允许跨域cookie。

由于主页属于域Facebook.com,而您的iframe域不同,Safari不会在iframe内处理cookie。

尽管其他浏览器也有变通办法,Safari也曾有过变通办法,但苹果似乎堵住了这个漏洞。

http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/

在Safari 中设置跨域cookie

虽然我看不到你的完整代码&在这种情况下,我建议您避免使用会话,并始终查询Facebook API以检查"点赞"&ampadmin'标志。如果用户的管理权限被吊销,或者用户不喜欢该页面,那么您的SESSION变量将不同步(除非您不断更新SESSION参数)。

检查用户是否喜欢该页面:如何检查当前脸书用户是否喜欢使用PHP SDK的页面?

检查用户是否为管理员:如何获取用户是否是使用Facebook Graph API的页面管理员(isAdmin)?