2011-05-05 113 views
0

我在facebook上的画布应用中使用了php sdk。 我有3页:index.php文件play.php & register.phpfacebook会话cookie问题

两个指数&发挥我检查是否有这样一个会议:

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

所以,如果我不知道用户是谁,他是我的应用程序的新用户,请将他指向register.php并将他的用户名放入我的数据库中。

我遇到的问题是,有些用户可以正确看到入口页面index.php,但是当浏览到play.php时,它们会被重定向到注册页面。之后,每当他们尝试进入播放页面时都会发生同样的事情。

这里有一些非常错误的东西。我尝试清除cookie,但似乎没有任何工作。

回答

0

我可能会认为$facebook->api(...)可以返回为负阳性值(即返回值为TRUE值,但真的不是,作为一个字符串“未授权”,或一个空数组)。依赖于非运算符('!')可能不是那么可靠,我会检查返回类型(虽然我不知道API,但不能告诉你它是什么)

最好的东西要做的是var_dump ($facebook->api('/me')) ;看看它实际返回。你也可以尝试一个适当的测试,而不仅仅是不操作者和命令,所以而不是;

if ($me) { ... } 

试试;

if (is_object ($me)) { ... } 
if (is_array ($me)) { ... } 
if (! empty ($me)) { ... } 

或者任何您可以测试到$ facebook-> API(“/我”),甚至具体像什么其他的事情;

if ($me !=== NULL) { ... } 

无论如何,我确定您的问题在于如何测试您的返回数据的业务逻辑。

+0

我使用var_dump,对于某些用户总是有一个返回值,对于其他用户来说 - 一次没关系,另一个是NULL – Tom 2011-05-05 11:26:21

+0

然后我建议在$ facebook *或*会话管理的其他部分或身份验证,甚至可能是某些用户进行身份验证的方式。很难说没有这些用户返回的实际打印输出。浏览整个课程,看看是否有任何问题,或者先在GitHub上提出问题。 – AlexanderJohannesen 2011-05-05 11:45:29