我似乎无法获得我正在构建的Facebook连接应用程序以将用户注销(抱歉没有网址,因为它仍然在开发中)。每次用户单击带有“logout”类的链接时,下面的JS运行似乎都有效,甚至显示FB模态,说明用户已经注销。
$(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 - 但下一页加载似乎仍然使用它们?!
如果有人知道如何完全<打击> DESTROY ALL FACEBOOKS ahem ... session,那么请大声说出来。
:编辑: 我甚至尝试手动删除注销页面上的所有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']);
}
}
答案 0 :(得分:1)
我的猜测是,因为你正在启动Facebook api类,它会读取会话并再次设置所有cookie,你的Javascript调用刚刚被清除。
php facebook lib和FB js lib都使用相同的cookienames。 (所以你可以通过javascript登录,php lib也会登录)。
通过以下方式注销和转到URL的特定功能:
FB.Connect.LogoutAndRedirect(url);
答案 1 :(得分:0)
只需使用<fb:login-button>
标记,并确保您拥有autologoutlink='true'
然后,当用户登录时,打印出<fb:login-button>
标记,它将显示为“退出?”按钮
希望有所帮助。
修改: 登录按钮的docos:http://wiki.developers.facebook.com/index.php/Fb:login-button
答案 2 :(得分:0)
这适用于我(重定向页面清除服务器内容)
FB.logout(function(response) {
window.location.href="/login/signout";
});