2012-01-05 22 views
0

無論我做什麼,這總是返回一個有效的ID和Facebook信息。要註銷,我正在使用Facebook.Logout,重定向到一個頁面,我清除所有cookies,包括「fbsr_」。我甚至手動註銷Facebook,它仍然返回一個有效的ID!這是針對Facebook Connect應用程序的。這裏是我的應用程序代碼,

$uid = $facebook->getUser(); 

if ($uid) { 
    try { 
    $me = $facebook->api('/'+$uid); 
    } catch (FacebookApiException $e) { 
     echo $e; 
    error_log($e); 
    $uid = NULL; 
    } 
} 

然後我的PHP註銷代碼,

$app_id="XXXX"; 
session_name('QEW'); 
session_start(); 
session_regenerate_id(true); 
session_unset(); 
session_destroy(); 
$facebook->destroySession(); 
if (isset($_COOKIE['fbsr_' . $app_id])) 
{ 
     setcookie('fbsr_' . $app_id, $_COOKIE['fbsr_' . $app_id], time() - 3600, "/"); 
     setcookie('PHPSESSID', $_COOKIE['PHPSESSID'], time() - 3600, "/"); 

     unset($_COOKIE['fbsr_' . $app_id]); 
     unset($_COOKIE['PHPSESSID']); 
} 

編輯 我的JavaScript代碼,

window.fbAsyncInit = function() { 
    FB.init({ 
     appId:'XXX', cookie:true, 
     status:true, xfbml:true, oauth:true, 
     channelURL:'~~.com/channel.html' 
     }); 
}; 
(function() { 
      var e = document.createElement('script'); e.async = true; 
      e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
      e.async = true; 
      document.getElementById('fb-root').appendChild(e); 
      }()); 
function login(io) 
{ 
    FB.getLoginStatus(function(response) 
    { 
     if(response.status == 'connected') 
     { 
      if(io==1) 
      { 
       FB.login(function(response) 
       { 
        if (response.authResponse) 
        { 
        cU(response.authResponse.userID); 
        } 
       },{scope:'email'}); 
      } 
      else 
      { 
       FB.logout(function(response){}); 
       window.location="./logout.php"; 
      } 
     } 
     else 
     { 
      FB.login(function(response) 
      { 
       if (response.authResponse) 
       { 
       cU(response.authResponse.userID); 
       } 
      },{scope:'email'}); 
     } 
    }); 
} 

然後 「退出」 後,我去到另一個頁面再次調用第一個代碼塊,並且它只是重新填充cookie,因爲它獲得了有效的用戶標識。我怎樣才能解決這個問題?謝謝

+0

你使用客戶端FB JS相同API? – zerkms 2012-01-05 05:03:37

+0

我從服務器上抓取他們的庫。我編輯了我的代碼到問題中。 – Tanner 2012-01-05 05:14:59

回答

1

你可以通過php刪除cookie。之後,在下一個請求JS API恢復它。

唯一且有效的方式從Facebook到註銷是重定向用戶到註銷URL:

echo $facebook->getLogoutUrl(); 

或從客戶端JS API FB.logout();

+0

啊我看到發生了什麼。但即使使用該鏈接仍會導致API在我回到頁面時恢復它。它不會永久地註銷我。基本上發生的事情是,我在主頁上點擊註銷按鈕,它使用FB.Logout將我註銷,然後再調用logout.php,然後重新加載主頁。當它重新加載主頁時,它正在捕捉JS中的API調用以再次創建它。使用註銷URL做同樣的事情,當它再次加載主頁時,它被重新填充。 – Tanner 2012-01-05 05:37:19

+0

@Tanner:只要你**將用戶重定向到註銷頁面 - 用戶正在從Facebook註銷,所以你**應該**失去了你的應用程序的會話 – zerkms 2012-01-05 05:40:18

+0

說實話,我甚至不能得到臉書.com/logout.php?access_token = ...甚至可以通過瀏覽器工作。它只是重定向到/home.php:\ – Tanner 2012-01-05 06:12:59