无法登出Facebook连接站点并销毁会话

时间:2009-10-09 22:00:15

标签: php session facebook

我似乎无法获得我正在构建的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']);
    }
}

3 个答案:

答案 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";
            });