FB标签页应用程序和会话的safari bug

时间:2014-04-09 10:09:08

标签: php facebook session safari

我有问题..

我尝试编写像facebook页面标签应用程序一样的程序。 我必须使用session来记住signed_request。

但问题是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();
}

1 个答案:

答案 0 :(得分:0)

Safari不允许跨域Cookie。

由于主页面属于Facebook.com域,您的iframe域名不同,Safari不会在iFrame中处理Cookie。

虽然有其他浏览器的解决方法,但有一次针对Safari有一种解决方法,似乎Apple已经关闭了这个漏洞。

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

Setting cross-domain cookies in Safari

虽然我看不到你的完整代码和方案,我建议你避免使用会话,并始终查询Facebook API以检查'喜欢'和&amp; 'admin'标志。 如果用户的管理员权限被撤销,或者用户不喜欢该页面,那么您的SESSION变量将变得不同步(除非您不断更新SESSION变量)。

检查用户是否喜欢该页面: How to check if current facebook user like a page using PHP SDK?

检查用户是否为管理员: How to get if a user is admin of a page (isAdmin) using the Facebook Graph API?