2011-08-25 37 views
1

我在我的網站上設置了Facebook Connect,登錄工作正常。我設置了一個監聽器來檢測登錄狀態的變化,如下:刷新Facebook Connect會話的頻率如何?

FB.Event.subscribe('auth.sessionChange', function() { 
     window.location.reload(); 
    }); 

一切都很好。或許20分鐘後,將瀏覽器窗口打開導致頁面重新加載。所以auth.sessionChange在某個時間間隔內觸發。這可能會造成嚴重破壞,特別是如果最後一頁是POST表單提交。

在FB文檔中,它表示「只要用戶對您的應用程序處於活動狀態,會話就會隨着時間刷新。」此會話多久刷新一次?

如何防止頁面重新加載,如果不需要?一個條件可能在該函數內?

編輯 - 添加澄清信息:

我想我會添加一些信息給那些提供的建議更多去(感謝到目前爲止BTW):

我的原因監聽器觸發重新加載是因爲我希望用戶在每次訪問時都登錄到站點 - 如果他們已經在FB中進行了會話。我正在用JS SDK檢測一個活動會話,我知道它可以自己登錄,但是我需要在JS完成檢測後觸發頁面重新加載,以便爲該站點設置PHP會話 - 必需的步。沒有先讓JS檢測瀏覽器中的FB會話,我就無法進行PHP登錄。

回答

0

通常只需查看會話本身就可以看到會話有效性的長度。但是,在許多情況下,我建議請求offline_access權限,以確保access_token保持有效,只要用戶不更改其密碼並且不會刪除您的應用程序。

+0

Facebook不會阻止它,事實上很多工程師建議你使用它。關於如何開發Facebook應用程序的書甚至包含了有關如何在大多數應用程序中使用它的摘錄,除了那些頁面瀏覽量很大的應用程序外。上面他正在做的事情可能是offline_access工作得最好的情況,否則用戶將被要求更頻繁地刷新頁面,例如10分鐘。 –

+0

當頁面重新加載時,請求'offline_access'權限只是爲了不「double」發佈表單不是一個很好的理由(至少對我而言)。雖然這個權限可以在用戶已經登錄時使用(即使我不能想到一個案例),但是當用戶當前沒有登錄到Facebook時,這個權限是應用程序需要的「離線」活動。 – ifaour

+0

另請注意,問題中有兩個部分:1)如何避免重新加載(我建議回答)2)事件被調用的頻率(我不知道答案) – ifaour

0

安迪,如果你只監聽登錄狀態,然後訂閱auth.loginauth.logout的代替auth.sessionChange

如果您需要爲用戶的活動會話會在您的網站的操作,使用FB.getLoginStatus()FB.getSession()檢查會話對象。

http://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

http://developers.facebook.com/docs/reference/javascript/FB.getSession/

+0

OP是沒有要求使用不同的事件! – ifaour

+0

建議正確的做事方法有什麼問題? – Sid

+0

誰說使用'auth.sessionChange'是錯誤的? – ifaour

-1

這真的取決於你的應用程序的工作流程和下只是一般的方法

如果您不需要重新加載頁面,您可以在您的所有頁面(如果您使用的是模板系統的主佈局)中顯示一個標誌,並使用setter函數執行該標誌。喜歡的東西:

var do_reload = true; // By default, we always allow a reload 

FB.Event.subscribe('auth.sessionChange', function() { 
    if(do_reload) { 
     window.location.reload(); 
    } 
}); 

// Call this whenever you don't want 'auth.sessionChange' to reload the page 
function turnoff_reload() { 
    do_reload = false; 
} 

// Call this to return to default behavior 
function turnon_reload() { 
    do_reload = true; 
} 

現在,如果你是「重定向」的用戶(例如:後表單POST)一個網頁,不需要重新加載,那麼你需要在第一線,設置標誌false

另一種場景,如果你有一個基於用戶交互的加載ajax的內容,如果頁面自身重新加載內容將丟失,用戶需要再次交互以查看該內容,這裏可以做的是設置在Ajax調用後標記爲false

+0

我不確定丟失數據是值得在任何應用程序中考慮的事情。可用性是任何應用程序或遊戲中的關鍵。 –

+0

@Francis,請你詳細說明一下嗎? – ifaour