2011-05-05 110 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