真的很奇怪,使用 PHP SDK (v 3.2.2) 似乎 Facebook 会话丢失了 ($user = 0)。JS SDK 需要重新加载我的页面以恢复 Facebook 会话。这个问题不时发生,有时 Facebook 会话丢失,有时它工作得很好。
session_start();
// Run Facebook API
$facebook = new Facebook(array(
'appId' => $config['facebook']['id'],
'secret' => $config['facebook']['secret']
));
// Fetch user
$user = $facebook->getUser();
if($user) {
try {
// Just to be sure, add access token to each request
$user['access_token'] = $facebook->getAccessToken();
// Fetch user details
$user = $facebook->api('/me?access_token='.$user['access_token']);
}
catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
主要问题是 $user = $facebook->getUser(); 返回 0。但是,当用户实际连接时,JS SDK 检测到 auth.login 事件并重新加载页面(另一件奇怪的事情,我使用 auth.login,因为 auth.authResponseChange 事件每秒都会被触发)。现在 $user = $facebook->getUser(); 返回用户的 uid。
window.fbAsyncInit = function() {
FB.init({
appId : appId,
channelUrl : '//domain.com/signon/channel.php',
status : true,
cookie : true,
xfbml : true
});
FB.Event.subscribe('auth.login', function(response) {
location.reload();
});
};
在 Facebook 开发人员中,我定义了应用程序域 (domain.com) 和站点 URL ( http://domain.com/ )。已经尝试了带/不带斜杠的站点 URL,但没有解决问题。
知道发生了什么,为什么 Facebook PHP SDK 没有立即检测到用户的会话/不断丢失用户的会话并需要重新加载?这个问题确实会导致糟糕的用户体验。
非常感谢!
罗宾