2013-05-07 163 views
0

我的問題是以下。 我有一個網站 http://de.gamercharts.com/Facebook登錄錯誤使用FB php sdk

您可以與Facebook連接(如果你沒有一個帳戶,帳戶將被創建)。 之後,如果您從網站註銷,您也從Facebook註銷。 目前爲止一切正常。 問題是,如果我退出該網站(讓我們打電話給站點GC)並註銷Facebook,當我點擊網站上的「connect with facebook」時,我登錄到網站上,而不是提示到Facebook登錄屏幕。 當我打印用戶時,我發現即使我從Facebook註銷,我仍然有用戶ID。 爲什麼會發生這種情況,我該如何解決? 對任何花時間回答的人都非常感謝。 對於我正在使用Zend的記錄,雖然我不認爲它是相關的。 我自己沒有實現Facebook登錄,我正在繼續其他人的工作。

+0

這是一個衆所周知的問題包括或調用session_start()。你可以粘貼你的Facebook註銷腳本? – 2013-05-07 14:23:52

+0

我不處理Facebook登出我自己。我做這樣的重定向到Facebook:https://www.facebook.com/logout.php?next = http%3A%2F%2Fde.gamercharts.com%2Flogout&access_token = 367142350026907%7C44c1128426159aa61f9432c17bf16082。你可以傳遞一個url到這個函數,url是我們自己的註銷函數,這會刪除GC會話。 – 2013-05-08 12:51:51

+0

我不明白的是爲什麼當我退出facebook時我仍然看到我的FB用戶標識。我只是想讓我的問題更明顯。 – 2013-05-08 12:55:14

回答

1

問題的問題是這是由於您的域名/網站中存在Facebook Session Variables,即使從Facebook和您的網站註銷後也是如此。當某人從您的網站註銷時,應注意銷燬所有會話[甚至是facebook會話]。爲了銷燬您的域名/網站的Facebook會話,您可以在註銷腳本中使用destroySession(); [在facebook php sdk中提供]功能。

$config = array(); 
$config['appId'] = 'YOUR_APP_ID'; 
$config['secret'] = 'YOUR_APP_SECRET'; 
$facebook = new Facebook($config); 
$logout = $this->facebook->getLogoutUrl(array('next'=>'url to be redirected after logout')); 
$facebook->destroySession(); // To destroy facebook Sessions 
$session_destroy(); //To destroy sessions of your site 
header("Location:$logout"); 

P.S不要忘記在腳本

+0

Thanx John.Your答案指出我的方向正確,但問題是我的facebook對象沒有destroySession()方法。我在發佈這個答案之前檢查了這個答案,因爲我懷疑它與Facebook的會話有關。這些是我的臉書對象可用的所有方法。 – 2013-05-10 13:08:51

+0

陣列 ( [0] => __construct [1] => setAppId [2] => getAppId [3] => setApiSecret [4] => getApiSecret [5] => setFileUploadSupport [6] => useFileUploadSupport [7] => setAccessToken [8] => getAccessToken [9] => getSignedRequest [10] =>的getUser [11] => getLoginUrl [12] => getLogoutUrl [13] = > getLoginStatusUrl [14] => api ) – 2013-05-10 13:09:09

+0

我讀了關於這個方法,其他部分的destroySession,b ut似乎無法找到它。從我在文檔中看到的內容看來,你只需要讓用戶點擊Facebook註銷網址,就是這樣。這就是它所說的,也許你對它的理解是不同的。「 SDK可用於支持使用用戶的Facebook帳戶驗證您的網站。在服務器端,SDK提供了helper方法來進行身份驗證,請求權限和註銷。這個功能是由Facebook :: getUser(),Facebook :: getLoginUrl()和Facebook :: getLogoutUrl()方法提供的。「 – 2013-05-10 13:45:25

0

如果你使用Facebook SDK,那麼你需要使用異常的try-catch的檢查,如果用戶在仍處於登錄:

1$facebook = new Facebook(array(
2 'appId' => you id, 
3 'secret' => you secret, 
4)); 
5 
6// See if there is a user from a cookie 
7$user = $facebook->getUser(); 
8 
9if ($user) { 
10 try { 
11 // Proceed knowing you have a logged in user who's authenticated. 
12 $user_profile = $facebook->api('/me'); 
13 } catch (FacebookApiException $e) { 
14 error_log($e); 
15 $user = null; 
16 } 
17} 

之後,你可以從Facebook

得到正確的用戶名和其他信息

每次您需要請求我的頁面。如果此頁面發生錯誤,請刪除Facebook用戶的數據。用戶的ID以及存儲在cookie中的其他Facebook數據;當您在Facebook網站上註銷時,您的網站Cookie仍然保留;您的php代碼將會讀取這個cookies:

1$user = $facebook->getUser(); 

並返回用戶ID。 有了這個代碼:

1$user_profile = $facebook->api('/me'); 

您檢查,如果這是餅乾實際工作,如果不是的話,你改變它:

1$user = null; 

所有的餅乾

+0

嗯,我不明白這是如何回答我的問題。我的問題是,Facebook的API如何獲得一個用戶ID(我的用戶ID,我chcecked)如果我從Facebook註銷)。 – 2013-05-08 12:02:25