Facebook应用程序与PHP运行失败的会话

时间:2010-05-09 04:57:55

标签: php facebook

我试图建立一个基于PHP的Facebook应用程序。应用程序在我自己的Webhost上运行,在Canvas中作为iFrame运行。

我已经从Facebook收集了最新的PHP客户端库: facebook-php-sdk-94fcb13

要在我的应用程序内授权用户尝试使用Facebook Connect,就像客户端附带的示例一样。第一次登录时一切正常,但当我点击F5键重新加载页面时,会话丢失,我必须再次登录。当我在Facebook Canvas之外调用我的应用程序时,一切都很好。

我不确定,但我认为我的浏览器(Chrome / FireFox - Ubuntu)不允许在iFrame中存储Cookie。

有人知道这个问题的解决方案吗?以下是源代码的一些部分:

$facebook = new Facebook(array(
    'appId'  => 'x',
    'secret' => 'x',
    'cookie' => 'true',
));

$session = $facebook->getSession();
$facebook->setSession($session);


$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}

// login or logout url will be needed depending on current user state.
if ($me) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl();
}

2 个答案:

答案 0 :(得分:1)

解决: - )

我错过了在配置中设置basedomain。

在“Conntect”标签上,您必须将Basedomain设置为您的主机。

示例:应用程序在http://myapp.com/facebook/html下运行,而不是设置basedomain 到myapp.com

现在cookie已正确存储。

答案 1 :(得分:1)

php通过cookie值传递会话ID,如果无法发送,则通过get参数发送,如* .php?phpsessid ......

如果你使用header()重定向,它会丢失,解决方案在url中附加.SID,

标题(“blah blah”.SID);

希望它可以帮助你..