facebook注销只从网站注销而不是从facebook?

时间:2014-02-21 05:10:48

标签: php facebook facebook-php-sdk facebook-login

我正在登录facebook并从网站注销。因此,如果用户想要登录该网站,他将点击Facebook登录,当他点击退出时,他将自动从Facebook和该网站注销。所以我为此完成了我的代码 在index.html中,我的代码就像这样

<div id="fb-root"></div>
<script type="text/javascript">
//<![CDATA[
window.fbAsyncInit = function() {
   FB.init({
     appId      : 'XXXXXXXXXXXXX', // App ID
     channelURL : '', // Channel File, not required so leave empty
     status     : true, // check login status
     cookie     : true, // enable cookies to allow the server to access the session
     oauth      : true, // enable OAuth 2.0
     xfbml      : false  // parse XFBML
   });
};
// logs the user in the application and facebook
function login(){
FB.getLoginStatus(function(r){
     if(r.status === 'connected'){
            window.location.href = 'fbconnect.php';
     }else{
        FB.login(function(response) {
                if(response.authResponse) {
              //if (response.perms)
                    window.location.href = 'fbconnect.php';
            } else {
              // user is not logged in
            }
     },{scope:'email'}); // which data to access from user profile
 }
});
}

// Load the SDK Asynchronously
(function() {
   var e = document.createElement('script'); e.async = true;
   e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';                
   document.getElementById('fb-root').appendChild(e);
}());

//]]>
</script>
<a href='#' onclick='login();'>Facebook Login</a>

在fbconnect.php中,我的代码就像这样

<?php
    require 'src/facebook.php';
    $facebook = new Facebook(array(
           'appId'  => 'XXXXXXXXXXXXXXXXX',
           'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
           'cookie' => true,
    ));
    $user = $facebook->getUser();
    $loginUrl = $facebook->getLoginUrl();
    //echo "<a href='$loginUrl'>login</a>";

    $logoutUrl = $facebook->getLogoutUrl();
    //echo $loginUrl; 
    if($user){
        $_SESSION['user_info'] = $user; 
        $_SESSION['user_pro']= $facebook->api('/me');
        echo $_SESSION['user_pro']['first_name'];
        echo $_SESSION['user_pro']['last_name'];
        echo '<pre>';
        //print_r($_SESSION);
        echo '</pre>';
    }
    else{
        echo 'not logged in '; 
    }
    echo "<a href='logout.php'>log out </a>"
?>

在logout.php中,我的代码看起来像这样

<?php
require 'src/facebook.php';    //including the facebook php sdk
$facebook = new Facebook();
$token = $facebook->getAccessToken();
$url = 'index.html';
$facebook->destroySession();
session_destroy();
header('Location: '.$url);
?>

这一切都是在网站注销,但它没有从Facebook注销。那么有人可以告诉我如何同时从Facebook和网站注销?任何帮助和建议将非常值得赞赏。感谢

2 个答案:

答案 0 :(得分:0)

不要使用任何重定向<a href='logout.php'>log out </a>

只需要在行动facebook session destroy

if(isset($_GET['action']) && $_GET['action'] === 'logout'){
        $facebook->destroySession();
    }

然后您可以使用您的站点会话销毁 有关详细信息: - PHP SDK - Facebook Logout

答案 1 :(得分:0)

是的,这不会从Facebook注销。

我发现您也在使用JS SDK,因此您需要使用JS API进行注销。你可以这样做

echo '<a href="#" onclick = "fb_logout();" >Logout </a>';

你需要添加以下JS函数,我看你已经有了FB.login

<script>
            function fb_logout(){
                    if (FB.getAuthResponse()) {
                        FB.logout(function(){
                            top.location.href = 'logout.php'
                        });
                    }else{  
                        top.location.href = 'logout.php'
                    }
            }
</script>

确保在fbconnect.php文件中有以下JS,以便触发FB功能 所以完整的代码是

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

<script type="text/javascript">

  window.fbAsyncInit = function() {
    FB.init({appId: '<?php echo FACEBOOK_APP_ID ; ?>', status: true, cookie: true, oauth: true,
             xfbml: true});
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());

function fb_logout(){
                        if (FB.getAuthResponse()) {
                            FB.logout(function(){
                                top.location.href = 'logout.php'
                            });
                        }else{  
                            top.location.href = 'logout.php'
                        }
                }
</script>

在文件logout.php中,您可以处理网站的注销代码。

另外,要使用PHP SDK生成注销,您需要执行

$params = array( 'next' => 'page after logout' );

$logouturl = $facebook->getLogoutUrl($params); // $params is optional.

<a href="<?php echo $logouturl; ?>"> Logout </a>

我建议使用JS SDK进行注销,它肯定会起作用,也会从Facebook注销。