2009-10-09 131 views
0

我似乎無法獲得我正在構建的Facebook連接應用程序,以便將用戶註銷(遺憾的是沒有網址,因爲它仍在開發中)。每次用戶單擊「註銷」類的鏈接時,下面的JS運行似乎都能正常工作,甚至顯示FB模式表明用戶已註銷。麻煩註銷Facebook連接網站和銷燬會話

$(document).ready(function(){ 
    $('.logout').click(function(){ 
     //Kill facebook Session 
     FB.Connect.logout(function() { 
      window.location = $('.logout').attr("href"); 
     }); 
    }); 
}); 

在到達上面的回調中,JS將用戶的註銷頁面,PHP再次強制刪除自定義會話,並確保了FB會話已被刪除。然後用戶返回到他們點擊「註銷」鏈接時所在的頁面。

//Remove our site session 
Auth::logout(); 



/* FAIL 
//Send user to FB logout page and then back here 
$logout_url = $this->fb->get_logout_url(site_url($return_to ? base64_url_decode($return_to) : '')); 

// Clear any stored state 
$this->fb->clear_cookie_state(); 

exit(header("Location: ". $logout_url)); 
*/ 



//FAIL 
//$this->fb->logout(site_url($return_to ? base64_url_decode($return_to) : '')); 


//FAIL 
//Remove user (is this needed..?) 
//$this->fb->set_user(NULL, NULL); 


//Remove the FB session cookies (in case the JS didn't) 
$this->fb->clear_cookie_state(); 


// Redirect to privious page 
redirect(($return_to ? base64_url_decode($return_to) : '')); 

然而,在用戶整個過程的結果是右後衛在那裏他們仍然登錄。在鏈路上的第二次點擊,似乎這樣的伎倆,雖然拆除會話。我監視了firebug(w/firecookie)和PHP註銷頁面報告刪除了FB會話cookie - 但下一頁加載似乎仍然使用它們?!

如果有人知道如何完全 毀掉所有的FACEBOOKS 呃......會議然後請說出來。

:編輯: 我甚至嘗試手動刪除登出頁面上的所有Cookie,它仍然無法

if($_COOKIE) { 

    foreach($_COOKIE as $name => $value) { 

     //Get the current cookie config 
     $params = session_get_cookie_params(); 

     // Delete the cookie from globals 
     unset($_COOKIE[$name]); 

     //Delete the cookie on the user_agent 
     setcookie($name, '', time()-43200, $params['path'], '', $params['secure']); 
    } 
} 

回答

1

我的猜測是因爲你已經開始了Facebook API類讀取會話,並將所有的再次JavaScript調用剛剛清除的cookie。

php facebook lib和FB js lib都使用相同的cookie名稱。 (所以你可以通過javascript登錄,並且php lib也會被登錄)。

有一個日誌特定功能出來,順便去一個網址:

FB.Connect.LogoutAndRedirect(url); 
+0

如果Javascript剛剛清除了所有的cookie,PHP如何從cookie讀取會話? 此外,LogoutAndRedirect與使用註銷和window.location(這是我使用的)具有相同的問題。 – Xeoncross 2009-11-10 23:16:18

+0

JavaScript破壞PHP_SESSION cookie?數據存儲在某個地方,所以這意味着一個cookie或post/get請求參數。 – Les 2009-11-11 08:11:12

+0

我知道每個頁面的畫布頁面都有GET參數 - 但不能連接站點。而且由於使用了window.location,所以也沒有發送POST數據。無論如何,你的建議讓我現在考慮一些我可以測試的東西,所以我會接受你的答案,然後報告我的發現。 – Xeoncross 2009-11-12 19:18:32

0

只需使用<fb:login-button>代碼,並確保你有autologoutlink='true' 然後,當用戶登錄後打印出<fb:login-button>標籤,它會顯示爲「註銷?」按鈕

希望有所幫助。

編輯: 的登錄按鈕的的Docos:http://wiki.developers.facebook.com/index.php/Fb:login-button

+0

我恐怕註銷按鈕僅適用於不需要回撥的網站。換句話說,在用戶點擊這個按鈕並註銷後 - 他們仍然有我們的網站會話,他們無法刷新頁面。 – Xeoncross 2009-10-19 19:17:28

0

這爲我工作(其中重定向頁面清除服務器上的東西)

  FB.logout(function(response) { 
       window.location.href="/login/signout"; 
      });