2012-06-10 54 views
1

我試圖使用Facebook連接與PHP,重要的是用戶將保持登錄到我的網站,即使會話被銷燬後。Facebook連接的PHP - 保持登錄狀態

我已經從SDK運行了with_js_sdk.php示例。在這種情況下,用戶必須在每個會話中重新登錄。與example.php方法它不會發生,並且用戶保持永久登錄。

我想問爲什麼是這樣?並且有可能讓第一種方法使用戶始終登錄?

順便說一下,我想我需要PHP + JS組合,因爲我不想在登錄時刷新頁面。這是真的嗎?

謝謝...

+2

爲了讓用戶始終登錄,您可以使用具有更長過期時間(您自己的cookie而不是由fb設置的cookie)的cookie。 $ user = $ facebook-> getUser(); 獲取有關用戶登錄狀態的cookie。 如果過期用戶不再使用。 您可以使用更長的過期時間設置您自己的cookie。 –

回答

1

兩個例子都應該離開登錄的用戶。必要的登錄數據被存儲在cookie中,並重新使用。

可能是什麼問題:我發現「$ user = $ facebook-> getUser();」即使通過用戶登錄,調用有時也會失敗。我的建議並不是依賴那個調用,而是跳到下面的try/catch塊,並從那裏設置用戶。

try { $ user_profile = $ facebook-> api('/ me'); $ user = $ user_profile ['user_id']; (FacebookApiException $ e){ $ user_profile = false; $ user = null; }

由於這看起來更可靠。


如果失敗了,您可以自己控制它。步驟是:

  1. 告訴的Javascript不使用cookies
  2. 登錄用戶中,使用「getAccessToken」功能來獲得的登錄用戶的訪問令牌。將其存儲在您自己的名稱/持續時間的cookie中。
  3. 下次加載頁面時,請檢查您創建的訪問令牌cookie,然後使用「setAccessToken」,然後執行相同的try/catch塊。如果用戶返回無效,則清除您自己的cookie,因爲這意味着accesstoken已被用戶無效。

你不應該需要這最後一種方法(除非會話/設備之間共享令牌,或者希望離線訪問),因爲這是Facebook的SDK做什麼 - 但它確實有助於你控制和理解興田過程更多。


最後,你可以做所有登錄/ getAccessToken /存儲cookie的方法雖然JavaScript代碼,從而在登錄用戶,並無需刷新頁面記住它。只需在auth.login上檢查相應的操作即可記住cookie並更改頁面內容 - 不要重新加載頁面。

下次用戶刷新頁面/返回到站點時,cookie將被PHP讀取。請記住在註銷時清除cookie。

所以你可以做你想做的,是的。