2011-08-12 70 views
1

這個問題是關係到我的另一個問題獲取的Facebook用戶登錄狀態:How to know if a user log out of Facebook, FB.Event.Subscribe not work通過實時

在這個問題,我想,當用戶登出的Facebook得到回電事件。但由於目前還沒有合適的答案,我必須嘗試另一種方式。我試圖通過投票javascript來獲取用戶的登錄狀態,像這樣:

 function checkLogin() 
     { 
      alert("in"); 
      FB.getLoginStatus(function(response) { 
       if (response.status == "connected") { 
       // logged in and connected user, someone you know 
       alert("ok - 5 seconds has passed"); 
       } else { 
       // no user session available, someone you dont know 
       alert("not ok"); 
       } 
      }); 
      t=checkLogin("timedCount()",5000); 
     } 

這樣做的問題是:該函數只返回正確的結果在第一次被調用。之後,看起來結果被緩存,並且我始終接收到「連接」作爲響應,儘管用戶默默地由瀏覽器中的另一個選項卡註銷。

這並不好,因爲當時Facebook彈出一個對話框,要求用戶登錄。但是,如果用戶取消它,他仍然可以使用我的應用程序(導致他與我的應用程序服務器的會話尚未過期!)。

document,FB dev的說:

當你調用FB.getLoginStatus,一個HTTP請求可以是 www.facebook.com以檢查用戶的當前狀態。但是,如果 FB.getLoginStatus已經被這個瀏覽器會話期間調用, 和會話已經在cookie中堅持着,facebook.com可能並不需要一個HTTP請求到

所以我覺得這個效果由緩存引起。我想知道爲什麼Facebook這樣做。

有沒有人知道這個問題的解決辦法?

感謝您的幫助,

晃龍

回答

1

我花了很長的時間不夠,最終,直到我同事的一個解決了這個問題。

解決方案是我們需要再次撥打FB.init(),撥打getLoginStatus之前撥打cookie:false。這將刪除cookie並獲取新信息。

FB.init({ 
     appId:'${appId}', 
      cookie: false, 
     status: true, 
     xfbml: true 
    }); 

FB.getLoginStatus(function (response) { 
     if (response.session) { 
       alert("here"); 
     } 
}); 
+0

只是爲了更新問題:FB已經拉出了一些變化,我們需要更新代碼上方的代碼。詳情請見:https://developers.facebook.com/blog/post/525/ –