如果禁用第三方cookie,如何执行Facebook注销?

时间:2012-07-05 02:00:33

标签: facebook facebook-graph-api logout

我的网站上有一个退出页面,看起来像这样:

<div id="fb-root"></div>
    <script>
      // Load the Facebook SDK Asynchronously
      (function(d){
         var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
         if (d.getElementById(id)) {return;}
         js = d.createElement('script'); js.id = id; js.async = true;
         js.src = "//connect.facebook.net/en_US/all.js";
         ref.parentNode.insertBefore(js, ref);
       }(document));

      // Init the SDK upon load
      window.fbAsyncInit = function() {
        FB.init({
          appId      : '[valid_app_id]' // App ID
        });
        FB.getLoginStatus(function(loginResponse){
          // As soon as we get the login status... log out!
            FB.logout(function(logoutResponse) {
            // logged out!
          }); 
        });
      } 
    </script>

从vanilla Chrome浏览器访问时,该页面运行良好。但是,如果

[x]Block third-party cookies and site data

选项在“内容设置...”下检查Chrome,页面无法注销用户,报告

FB.logout() called without an access token.

这个问题有解决方法吗?我希望能够将用户注销,即使他们的安全设置比通常更严格。

1 个答案:

答案 0 :(得分:0)

我创建了一个解决此问题的解决方案,只需为您的访问令牌定义一个空值,并使用getLogoutUrl()mrthod将其最终重定向到注销页面:

$_SESSION['fb_YOUR_APP_ID_access_token'] = '';
$logout = $facebook->getLogoutUrl(array( 'next' => 'YOUR_LOGOUT_MESSAGE_PAGE'));
header("Location: $logout " );

抱歉我的英文不好!