Facebook php sdk会话逻辑

时间:2011-05-05 12:47:22

标签: php facebook facebook-graph-api

我如何在我的Facebook应用程序中维护会话cookie? 目前我的所有页面都有以下代码:

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


$session = $facebook->getSession();

$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(array('canvas' => 1,
                                          'fbconnect' => 0,
                                          'req_perms' => 'publish_stream,email',
                                          'next' => 'register.php',
                                          'cancel_url' => 'http://www.facebook.com/apps/application.php?id=MYAPPID&perms' ));
}

if (!$me){ print("<html><head>");
print("<script type=\"text/javascript\">function redirect(){ top.location.href = \"");

print($loginUrl);
print("\"; }</script></head>");
print("<body onload=\"redirect();\">Please wait...</body></html>"); exit(); }

这是错误的,据我了解,每次用户导航到画布中的不同页面时,我都会收到一个新会话。我需要使用请求吗?如果是这样我怎么做到这一点?

1 个答案:

答案 0 :(得分:3)

您正在使用PHP SDK来获取用户会话,这没关系。 PHP SDK足够聪明,可以在用户上设置和使用cookie来保存他们的会话信息 - 所以你不会在每次加载页面时从Facebook获取任何新东西。您确实需要在每个页面上安装重定向,以防万一用户会话超时,或者用户在使用中卸载您的应用程序,或者直接链接到应用程序的页面而不是已安装的用户。

为了使您的代码更清洁,您可以移动所有代码以获取会话和放大器。将安装从用户捕获到单个脚本,并将其包含在应用程序中每个页面的顶部。然后你就没有那么漂浮,你可以在需要的时候轻松地改变/调整它。

编辑:如果用户每次导航到应用程序中的其他页面时都会丢失会话,则用户的浏览器可能会阻止FB PHP SDK设置的cookie,因为它位于iframe中。您可能还需要在应用程序中设置P3P策略标头,这通常可以解决该问题。

<?php
header('P3P: CP="CAO PSA OUR"');