Facebook的PHP SDK的会话逻辑

问题描述:

我如何在我的Facebook应用程序维护会话Cookie? 目前我所有的网页中,有下面的代码:Facebook的PHP SDK的会话逻辑

$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(); } 

这是错误的,因为我明白,每次用户导航到不同的页面在我的画布我得到一个新的会话。我需要使用请求吗?如果是的话,我该如何做到这一点?

您正在使用PHP SDK来获取用户会话,这没关系。 PHP SDK非常聪明,可以在持有会话信息的用户身上设置和使用Cookie,因此,在每次加载页面时,您都不会从Facebook获取任何新的内容。你确实需要在每个页面上安装重定向,以防万一你的用户会话超时,或者用户卸载你的应用程序中途使用,或者直接链接到你的应用程序的页面,而不是安装的用户。

为了让代码更清晰一些,您可以移动所有代码来获取会话&将安装从用户捕获到单个脚本,并将其包含在应用程序中每个页面的顶部。然后你就没有那么多的东西了,你可以在需要的时候轻松地改变/调整它。

编辑:如果您的用户每次浏览到不同的网页应用程序中的时间失去了会话,用户的浏览器可能会阻止该FB PHP SDK的设置,因为它是iframe中的cookie。您可能还需要在应用程序中设置P3P策略标头,并且这通常可以解决该问题。

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

但是当他们浏览到不​​同的页面 – Tom 2011-05-05 12:54:11

+0

增加了更多的我的答案,这可能帮助(用户丢失会话: – 2011-05-05 13:00:46

+0

感谢在P3P策略标题的信息这已经为不必要的压力一天造成的我们。 – 2011-11-17 05:30:12