我正在facebook上的canvas应用程序中使用php sdk。 我有3页:index.php play.php& register.php
在索引和&我会以这种方式检查是否有会话:
$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并将他的uid放入我的数据库。
我遇到的问题是有些用户可以正确看到入口页面index.php,但是当导航到play.php时,他们会被重定向到注册页面。之后,每当他们尝试进入播放页面时都会发生同样的事情。
这里有些非常错误。我已经尝试过清除cookie,但似乎没有任何效果。
答案 0 :(得分:0)
我可能认为$facebook->api(...)
可以返回负面积极值(即。返回一个值为TRUE的值,但实际上不是,如字符串'UNAUTHORIZED',或者空数组)。仅依赖于not运算符('!')可能不是那么可靠,我会检查返回类型(虽然我不知道API并且不能告诉你它是什么)
最好的办法是var_dump ( $facebook->api('/me') ) ;
来查看它实际返回的内容。你也可以尝试一个正确的测试,而不仅仅是非操作符和命令,所以而不是;
if ( $me ) { ... }
尝试;
if ( is_object ( $me ) ) { ... }
if ( is_array ( $me ) ) { ... }
if ( ! empty ( $me ) ) { ... }
或者您可以通过$ facebook-&gt; api('/ me')测试的任何其他内容,甚至是特定类似的内容;
if ( $me !=== NULL ) { ... }
无论如何,我确定您的问题在于如何测试返回数据的业务逻辑。