我有问题..
我尝试编写像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();
}
答案 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?