2013-03-25 86 views
2

我已经登录了,看起来好像在哪里可以登录,接受应用程序(第一次),然后显示用户信息,如名称/图片等。Facebook页面刷新后PHP-SDK似乎失去了用户ID

但是,当我刷新页面时,userid会回到0,我必须再次登录 - 我不确定问题出在哪里,每当页面加载时我必须重新启动它或什么?我不知道,我会张贴一些代码 - 因为他们是一群独立的文件可能是艰难的:

fb_login.php -

<?php 
    require_once("fb_login/facebook.php"); 
    $facebook = new Facebook(array(
     'appId' => 'APP_ID', 
     'secret'=> 'APP_SECRET', 
     'cookie'=> 'true' 
    )); 
    $userId = $facebook->getUser(); 

    if ($userId) { 
     $userId = $facebook->getUser(); 
     echo("userID is: $userId"); 
} 
    else{ 
     header("Location: {$loginURL}"); 
     echo("userId is: $userId"); 
    } 


?> 

navbar.php -

<?php 
       if($userId){ 
       try { 
        $user_profile = $facebook->api('/me','GET'); 
        echo '<li><a href="#">Welcome: ' . $user_profile['name'] . '</a></li>'; 
        echo '<li><img src="https://graph.facebook.com/' . $user_profile['username'] . '/picture"><li>'; 
        echo '<li class="divider-vertical"></li>'; 
       } catch (FacebookApiException $e) { 
        $login_url = $facebook->getLoginUrl(); 
        echo '<li>Please <a href="' . $login_url . '">login.</a></li>'; 
        error_log($e->getType()); 
        error_log($e->getMessage()); 
       } 
       } 
       else{ 
        echo '<li><a href="newUser.php">Sign Up</a></li> 
         <li class="divider-vertical"></li>'; 
       } 
      ?> 
<?php 
        if ($userId) { 
        // echo("userID is: $userId"); 
        // $params = array('next' => 'http://localhost/bcbooks-repo/index_new.php'); 

        $logoutUrl = $facebook->getLogoutUrl(); // $params is optional. 
        echo '<li><a href="' . $logoutUrl . '">Log Out</a></li>'; 
        $facebook->destroySession(); 
        } 
        else{?> 
<?php 
       $userId = $facebook->getUser(); 
       $accessToken = $facebook->getAccessToken(); 
       $params = array(
        'scope' => 'read_stream, friends_likes', 
        'redirect_uri' => 'http://localhost/bcbooks-repo/index_new.php' 
       ); 

       $loginUrl = $facebook->getLoginUrl($params); 
       echo '<a href="' . $loginUrl . '" class="btn btn-primary btn-block" type="button" id="sign-in-facebook">Sign In with Facebook</a>'; 
             ?> 
<?php } ?> 

指数.PHP -

<?php 
    require_once 'inc/FB_login.php'; 
require_once 'inc/navbar.php'; ?> 

已登录 - Logged in

页面刷新后After refresh

控制台导致Console results

回答

2

建立在什么法比奥建议尝试使用顶部这个代码(很明显,您的实际应用程序ID替换YOUR_APP_ID)

 <div id="fb-root"></div> 
    <script>  

    window.fbAsyncInit = function() { 
    FB.init({ 
     appId: 'YOUR_APP_ID', 
     status: true, 
     cookie: true, 
     xfbml: true, 
     channelUrl:'/channel.html', 
     frictionlessRequests: true, 
     useCachedDialogs: true, 
     oauth: true 
    }); 
    FB.Event.subscribe('auth.login', function(response) { 
     window.location.reload(); 
    }); 
    FB.Event.subscribe('auth.logout', function(response) { 
     window.location.reload(); 
    }); 
    }; 
(function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
    }(document)); 
     </script> 
+0

似乎很遗憾 - UserId在刷新后仍然恢复为0 – Kevin 2013-03-26 00:52:53

+0

实际上它似乎陷入了某种循环并且不断刷新/每秒重新加载页面几次 – Kevin 2013-03-26 02:32:07

+0

尝试将您的调用删除到标头($ loginUrl)。我认为如果身份验证尚未完成,它可能会继续将它们发送到您的代码中的登录网址 – TommyBs 2013-03-26 07:37:41

1

虽然你加载了Facebook PHP SDK与cookie的选项TRUE,如果用户已经登录了你的网站的服务器端无法猜测,或者如果他更改为其他帐户等。

如果要在所有页面中保留usar,则必须将javascript SDK与PHP SDK结合使用。要做到这一点,你只需要加载JavaScript SDK在您的每个网页,把这个每个需要与Facebook互动旁边<body>标签页:

<body> 
    <div id="fb-root"></div> 
     <script> 
      window.fbAsyncInit = function() { 
      FB.init({ 
       appId  : 'YOUR_APP_ID', // App ID 
       channelUrl : 'URL TO YOUR CHANNEL FILE', // Channel File Optional 
       status  : true, // check login status 
       cookie  : true, // enable cookies to allow the server to access the session 
       xfbml  : true // parse XFBML 
      }); 

      // Additional initialization code here 

      }; 


      // Load the SDK Asynchronously 
      (function(d){ 
      var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
      if (d.getElementById(id)) {return;} 
      js = d.createElement('script'); js.id = id; js.async = true; 
      js.src = "//connect.facebook.net/en_US/all.js"; 
      ref.parentNode.insertBefore(js, ref); 
      }(document)); 
    </script> 
+0

谢谢你 - 我补充说,但仍然没有骰子。每当我刷新页面时,UserId会立即返回0.我不需要重新授权应用程序,我只需要登录,但它肯定似乎没有记住。 – Kevin 2013-03-25 18:27:15

+0

Cookie正在设置中,所以这是好 - 也许我需要写一些JS来检查每个页面加载时的cookie? – Kevin 2013-03-25 18:30:52

+0

不,javascript SDK和PHP SDK处理,你有你的项目在线吗?你有没有试过使用萤火虫或铬的控制台来检查是否正确加载JavaScript? – 2013-03-25 18:42:53

0

尝试在一个cookie申报用户ID,就像这样:

$user = $facebook->getUser(); 
$expire=time()+60*60*24*30; 
setcookie("user", $user, $expire); 

对我来说它的工作就像一个魅力;)

相关问题