2010-01-01 70 views
3

我在使用PHP構建的網站上使用Facebook Connect API作爲登錄系統。有沒有簡單的方法來確定用戶是否登錄。更新Facebook連接網站的cookies?

$fb = new Facebook($api, $secret); 
$fb->get_loggedin_user(); 

上述函數總是返回一個用戶ID,一旦用戶與該網站驗證,即使他們登出的Facebook,但它仍然回報他們的用戶ID。
我已經在此工作了一段時間,並且環顧四周後,我認爲它這樣做的原因是因爲當用戶在網站上進行身份驗證時,Facebook JavaScript API存儲用於保存會話信息的Cookie 。
但是,如果用戶退出常規Facebook會話,即使會話不再有效,cookie仍然會返回值。
我的問題是我如何更新cookie,以便他們在會話不再有效時不給我值?

回答

3

這可能有點棘手。基本上Facebook在用戶的瀏覽器上存儲了一堆cookie,命名空間爲您的應用程序ID(即12345_fb_sig =等)。這些cookie用於告訴您的FB Connect應用程序用戶已登錄Facebook,並傳遞Facebook會話ID。但是,如果用戶去其他地方註銷,這些cookie不會被清除,就連接站點而言,用戶仍然登錄。如果用戶晚點回來,並且您嘗試使用該API進行API調用會話密鑰,它會失敗。

您可以將服務器端庫調用中的這些cookie從PHP FB API客戶端$facebook->api_client->clear_cookie_state()中清除,但是我不會推薦這種方法。它要求您在每次加載頁面時都進行一些API調用,以確認會話密鑰仍然有效,並且會增加很多開銷。

通常,處理此問題的最佳方法是使用FB Connect已在使用的FB Javascript庫。您可以在客戶端的會話狀態已經改變一個參數添加到FB.init()呼叫用於設置FB連接,這將迫使刷新頁面:

FB.init("<YOUR-API-KEY>", "<YOUR-CROSS-DOMAIN-CHANNEL-URL>", {"reloadIfSessionStateChanged":true}); 

這有點不雅,因爲用戶將看到一個頁面重新加載發生,但它可能是確定的最佳方式。我強烈建議您查看Detecting Connect Status wiki頁面以瞭解更多關於這些技術的信息。

+0

當你說它會重新加載頁面,這隻會發生,如果他們註銷Facebook的? – JasonDavis 2010-01-03 08:32:48