2014-09-22 111 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