2012-01-05 7 views
0

何らかの理由で何らかの理由でこれは有効なIDとFacebookの情報を常に返しています。ログアウトするには、Facebook.Logoutを使用して、 "fbsr_"を含むすべてのCookieをクリアするページにリダイレクトします。私はFacebookから手動でログアウトしても、有効なIDを返しています!これはFacebook Connectアプリケーションのためのものです。ここに私のアプリのコードは、私のPHPログアウトコードは、その後、いつもIDを返す - ログアウトできません

$uid = $facebook->getUser(); 

if ($uid) { 
    try { 
    $me = $facebook->api('/'+$uid); 
    } catch (FacebookApiException $e) { 
     echo $e; 
    error_log($e); 
    $uid = NULL; 
    } 
} 

$app_id="XXXX"; 
session_name('QEW'); 
session_start(); 
session_regenerate_id(true); 
session_unset(); 
session_destroy(); 
$facebook->destroySession(); 
if (isset($_COOKIE['fbsr_' . $app_id])) 
{ 
     setcookie('fbsr_' . $app_id, $_COOKIE['fbsr_' . $app_id], time() - 3600, "/"); 
     setcookie('PHPSESSID', $_COOKIE['PHPSESSID'], time() - 3600, "/"); 

     unset($_COOKIE['fbsr_' . $app_id]); 
     unset($_COOKIE['PHPSESSID']); 
} 

EDIT 私のJavascriptコード、

window.fbAsyncInit = function() { 
    FB.init({ 
     appId:'XXX', cookie:true, 
     status:true, xfbml:true, oauth:true, 
     channelURL:'~~.com/channel.html' 
     }); 
}; 
(function() { 
      var e = document.createElement('script'); e.async = true; 
      e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
      e.async = true; 
      document.getElementById('fb-root').appendChild(e); 
      }()); 
function login(io) 
{ 
    FB.getLoginStatus(function(response) 
    { 
     if(response.status == 'connected') 
     { 
      if(io==1) 
      { 
       FB.login(function(response) 
       { 
        if (response.authResponse) 
        { 
        cU(response.authResponse.userID); 
        } 
       },{scope:'email'}); 
      } 
      else 
      { 
       FB.logout(function(response){}); 
       window.location="./logout.php"; 
      } 
     } 
     else 
     { 
      FB.login(function(response) 
      { 
       if (response.authResponse) 
       { 
       cU(response.authResponse.userID); 
       } 
      },{scope:'email'}); 
     } 
    }); 
} 

はその後、 "ログアウト" した後、私は行くです最初のコードブロックをもう一度呼び出す別のページに移動し、有効なユーザーIDを取得したため、Cookieが再投入されます。どうすればこの問題を解決できますか?ありがとう

+0

あなたはクライアント側FB JSを使用してください。 API? – zerkms

+0

私はサーバーからライブラリを掴んでいます。私は質問に自分のコードを編集しました。 – Tanner

答えて

1

あなたはPHPでクッキーを削除します。その後、次のリクエストでJS APIがそれを復元します。

のFacebookからログアウトにのみ、有効な方法は、URLをログアウトするようにユーザーをリダイレクトすることです:クライアントJSのAPIから

echo $facebook->getLogoutUrl(); 

または同じFB.logout();

+0

ああ、私は何が起こっているかを見ます。しかし、そのリンクを使用しても、私がページに戻ったときにAPIはそれを元に戻します。それは永久に私をログアウトさせません。基本的に私はホームページにいて、ログアウトボタンをクリックすると、FB.Logoutを使ってログアウトし、その後、logout.phpが呼び出され、再びホームページがリロードされます。ホームページを再読み込みするときは、JSでAPIコールをキャッチして再び作成するときです。ログアウトURLを使用することは同じことを行います。ホームページを再度読み込むと、再読み込みされます。 – Tanner

+0

@Tanner:**あなたがログアウトページに**リダイレクトしている限り、ユーザーはFacebookからログアウトされているので、**あなたのアプリでセッションを失いました** – zerkms

+0

正直言って私はFacebookを手に入れることさえできません.com/logout.php?access_token = ...ブラウザを操作することさえできます。 /home.php:\ – Tanner

関連する問題