2014-09-22 77 views
0

我正在使用Facebook PHP API 4.0並嘗試獲取會話變量以設置,所以我可以使用用戶的Facebook數據。Facebook連接PHP會話變量不會設置

該應用程序和Facebook批准頁面都按預期工作,但$ session變量仍然未設置,無論我嘗試什麼。我試圖從Stack的類似問題中找到解決方案,但沒有成功。這是我使用的代碼:

session_start(); 


//start fb login stuff 
require_once($config['basedir'].'/Facebook/FacebookSession.php'); 
require_once($config['basedir'].'/Facebook/FacebookRedirectLoginHelper.php'); 
require_once($config['basedir'].'/Facebook/FacebookRequest.php'); 
require_once($config['basedir'].'/Facebook/FacebookResponse.php'); 
require_once($config['basedir'].'/Facebook/FacebookSDKException.php'); 
require_once($config['basedir'].'/Facebook/FacebookRequestException.php'); 
require_once($config['basedir'].'/Facebook/FacebookAuthorizationException.php'); 
require_once($config['basedir'].'/Facebook/GraphObject.php'); 

use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 
use Facebook\FacebookRequest; 
use Facebook\FacebookResponse; 
use Facebook\FacebookSDKException; 
use Facebook\FacebookRequestException; 
use Facebook\FacebookAuthorizationException; 
use Facebook\GraphObject; 

// init app with app id (APPID) and secret (SECRET) 
FacebookSession::setDefaultApplication($fb_app, $fb_secret); 

$helper = new FacebookRedirectLoginHelper($config['baseurl']); 

try { 
    $session = $helper->getSessionFromRedirect(); 
} catch(FacebookRequestException $ex) { 
    // When Facebook returns an error 
    echo $ex; 
} catch(\Exception $ex) { 
    // When validation fails or other local issues 
    echo $ex; 
} 
if ($session) { 
    echo 'Session var is finally being seen'; 
} 
//end Facebook login stuff 
+0

那麼,什麼是在例外?從你的代碼中,我們看到你只是忽略了拋出的異常。 – zerkms 2014-09-23 01:45:11

+0

那麼工作流程是什麼?用戶是否被重定向到你的頁面?你究竟做了什麼來獲得預期的結果? – zerkms 2014-09-23 02:12:04

+0

用戶必須通過Facebook批准應用程序,然後將其重定向到包含上述代碼的索引頁面。 IE瀏覽器。他們被從登錄頁面重定向到索引頁面,索引頁面有一個配置頁面,包括'require_once('config.php');'這個配置頁面有上面的代碼來檢查用戶是否通過Facebook登錄。 – JimmyBanks 2014-09-23 14:03:55

回答

1

$session仍然未設置,因爲你沒有登錄用戶,您應該修改代碼的最後一部分是這樣的:

if (isset($session)) { 
    echo 'Session var is finally being seen'; 
} else { 
    // show login url 
    echo '<a href="' . $helper->getLoginUrl(array()) . '">Login</a>'; 
} 

如果未設置$session,您的代碼將要求用戶登錄。登錄後,您的代碼的$helper->getSessionFromRedirect();部分應執行並設置$sessionSee my tutorial on how to tackle this


編輯

如果在從不同的頁面將用戶登錄,您需要確保$helper = new FacebookRedirectLoginHelper('{your-url}');是兩個頁面上是相同的。如果它們不同,那麼您將從與redirect_uri mismatch相關的API中獲得例外。

+0

我沒有包含登錄,因爲我已經找到了一個單獨的登錄頁面上的代碼,我向你保證用戶已經登錄(通過facebook審批流程等),並且我已經包含上面指定的登錄名在測試中頁面以及,我仍然有相同的問題 – JimmyBanks 2014-09-23 14:01:26

+0

哦,我應該澄清登錄鏈接反覆出現在測試頁 – JimmyBanks 2014-09-23 14:07:47

+0

這工作。謝謝!我的印象是,我可以使用Facebook連接API檢查用戶是否曾使用Facebook登錄過,而不需要使用登錄鏈接,是不是這種情況? – JimmyBanks 2014-09-24 16:00:46