我有个问题。。
我试着写一个像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以检查"点赞"&admin'标志。如果用户的管理权限被吊销,或者用户不喜欢该页面,那么您的SESSION变量将不同步(除非您不断更新SESSION参数)。
检查用户是否喜欢该页面:如何检查当前脸书用户是否喜欢使用PHP SDK的页面?
检查用户是否为管理员:如何获取用户是否是使用Facebook Graph API的页面管理员(isAdmin)?