簡體   English   中英

Facebook PHP SDK緩存用戶

[英]Facebook PHP SDK Caching User

我目前正在實施一個使用FB Connect的站點以及我們自己的系統來處理登錄。 它當前設置的方式,以前訪問過我們網站並批准我們權限的用戶在再次訪問該網站時會自動登錄。 此外,如果用戶在使用FB登錄其帳戶時點擊退出按鈕,則會將其記錄在FB之外。

現在,如果用戶已登錄並點擊已注銷的按鈕,則會將其從FB中記錄下來。 該站點自動創建一個新會話,並調用檢查以查看用戶是否仍使用PHP SDK getUser()函數登錄到FB。 似乎即使用戶注銷了SDK,也會緩存用戶ID並說他們已經從SDK登錄了。 您可以在下面看到對緩存的調用。 無論如何都要覆蓋這個沒有修改FB SDK或我是否接近問題?

if ($this->user !== null) {
  // we've already determined this and cached the value.
  return $this->user;
}

return $this->user = $this->getUserFromAvailableData();

問題:如果用戶通過Facebook注銷而不是使用您提供的調用會話殺手的鏈接,該怎么辦?

即使用戶不在,您仍會緩存會話。

它可能與您的應用程序流程有關。 FB PHP SDK也讓我很難過。

這可能會有所幫助:

通過將用戶重定向到logoutUrl來記錄用戶,然后將其重定向回您的站點。 此時你需要調用$ facebook-> destroySession();

看看代碼的作用(如base_facebook.php第1092行所示 ):

/**
 * Destroy the current session
 */
 public function destroySession() {
     $this->setAccessToken(null);
     $this->user = 0;
     $this->clearAllPersistentData();
 }

在此之后,正常清除會話,用戶應完全注銷而不是緩存。

在我的代碼中,當我生成loginUrl和logoutUrl時,我執行以下操作:

$fb_data = array(
     'loginUrl'  => $facebook->getLoginUrl(array('scope' => 'email,user_birthday')),
     'logoutUrl' => $facebook->getLogoutUrl(array('next' => base_url('index.php/authenticate/kill_session'))),
);

它在authenticate / kill_session方法中,我稱之為$ facebook-> destroySession();

您可以使用JS和PHP的組合來解決用戶從FACEBOOK站點注銷的問題。

在你的頁面加載,加載JS getloginstatus(),並且任何時候一個不匹配另一個(即.facebook JS loginstatus!=你的站點登錄狀態),強制刷新(通過JS)處理不匹配的頁面。

它可能看起來有問題(頁面自動刷新),但它對我來說沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM