5

Facebook Connectを使用して、Facebookアカウントを使用してユーザーにログインするアプリケーションで作業しています。

次の場合を除いて、すべて正常に動作します。

  1. ユーザーが私のウェブサイトとFacebookからログアウトしました。
  2. ユーザーが私のアプリに再度ログインしようとしました。

この場合、Facebook接続ポップアップが開くと「アプリケーションのエラー」と表示されます。

その理由は、ユーザーのログアウト時に古いfbsCookieが削除されていないことが原因であることがわかりました。アプリのログアウト時にCookieを削除するコードを追加しましたが、Cookieが削除されません。

これが私のコードです(Symfonyフレームワークを使用しています)。

$fbCookie = 'fbs_'.sfConfig::get('app_facebook_application_id');
          $cookie = $request->getCookie($fbCookie);
          if(!is_null($cookie)){
            setCookie($fbCookie," ", time()-3600);
          }       

これは機能しません。クッキーは同じままです。setCookie関数は期待どおりに「1」を返します。

何が問題になる可能性がありますか?

4

9 に答える 9

9

私もこれに問題があったと確信しています...Cookieを削除した直後にFacebookセッションを強制終了する必要があります。そうしないと、元に戻るだけです...これが例です

  // Assuming that $facebook is your facebook object populated with your settings
  $facebook = new Facebook(array(
          'appId'  => FB_APPID,
          'secret' => FB_APPSECRET,
          'cookie' => true));

  $fb_key = 'fbs_'.sfConfig::get('app_facebook_application_id');
  set_cookie($fb_key, '', '', '', '/', '');
  $facebook->setSession(NULL);
于 2011-01-23T20:07:51.390 に答える
5

Facebook SDK の現在のバージョンでは、使用する必要があります

$fb_key = 'fbsr_'.$facebookConfig['app_id'];
setcookie($fb_key, '', time()-3600);
$facebook->destroySession();

Cookie とセッションを手動で消去しようとしましたが、何らかの理由でまだ機能しませんでした ( Facebook PHP: After user logout of facebook, they can't login to my app with another user を参照)。上記のソリューションを使用すると、最終的に機能しました。

于 2012-04-04T10:39:15.370 に答える
1

私は同じ問題を抱えていましたが、ウェブで思いついた解決策はどれもうまくいきませんでした。その後、同じコードを持つ別のアプリが突然正常に動作したので、アプリの詳細設定を確認したところ、キャンバスの OAuth 2.0 が有効になり、タイムゾーンなしのイベントが有効になり、リクエスト 2.0 へのアップグレードが有効になりました。

それが役に立てば幸い

于 2011-06-03T18:36:12.273 に答える
1

必ず次のコードを使用してください。

$params = array( 'next' => 'https://yourUrl/logout' );
        $data['logoutUrl'] = $this->facebook->getLogoutUrl($params);

ページをログアウトコントローラーまたはページにリダイレクトしてから、そのページのセッションを強制終了します。

于 2012-09-09T17:26:25.263 に答える
0

私もこれに問題を抱えていました。Efazatiの答えとは反対に、私の問題はFacebookphpapiライブラリによって自分のドメインに設定されたCookieにありました。私が見落としていたのは、Cookieが設定された正確なドメインとパスを使用して、Cookieを削除するときでした。これは、私のためにCookieを正常に削除した行です。

setcookie("fbs_" . $app_id, '', time()-3600, "/", ".mydomain.com");

tgriesserのコメントも役に立ちました。

于 2011-05-02T21:08:36.670 に答える
0
<?php

// include the Facebook SDK
include_once 'src/facebook.php';

// Define crutial perams
define( 'APPID',    '' );
define( 'SECRET',   '' );
define( 'URL',      'http://fb.domain.co.uk' );

// shake my hand!
$facebook = new Facebook( array( 'appId' => APPID, 'secret' => SECRET, 'fileUpload' => true ) );

// if we are being visited by someone trying to logout, lets me sure they get logged out!
if( isset( $_GET['logged_out'] ) ) {
    setcookie( "PHPSESSID", "", (time()-3600) );
    header( "location: " . URL );
    exit();
}

// lets try to get the users id
$user_id = $facebook->getUser();
// try to get their access token
$access_token = $facebook->getAccessToken();

// if we have an id
if($user_id) {

    // from the offset, we're good to go...
    $logged_in = true;

    echo "<h1>Logged in</h1>";
    $params = array( 'next' => URL . '?logged_out' );
    $return .= '<br /><a href="' . $facebook->getLogoutUrl($params) . '">logout</a>';

}else{

    // login man!
    $login_url = $facebook->getLoginUrl( 
        array( 
            'scope' => 'read_stream, publish_stream, manage_pages, photo_upload',
            'next' => URL . '?logged_in' 
        ) 
    );
    $return .= 'Please <a href="' . $login_url . '">login.</a>';

}

echo $return

?>
于 2012-02-14T12:28:30.147 に答える
0

明らかに Cookie を読み取る権限があるにもかかわらず、何らかの理由で Cookie を削除できません (access_token を読み取らなければならなかったため)。

とにかく、この問題はローカルホストで発生します。サーバーでは、この問題に遭遇するべきではありません! Cookie もサーバー上で削除されませんが、再度ログインしようとすると、有効な access_token として認識されません。

于 2011-01-23T19:00:14.820 に答える
0

あなたが言ったように;)それはあなたのローカルスクリプトが設定するCookieに関するものであり、Facebook.comのものではないので、あなたの質問は正当です.

ここで同じ問題に遭遇します。PHPSDK では、Cookie を削除することはできません。したがって、Cookie なしでセッション全体を実行する必要があります。

$facebook = new Facebook(array(
    'appId'  => FB_APPID,
    'secret' => FB_APPSECRET,
    'cookie' => false,
));

または、ユーザーを facebook のログアウト URL にリダイレクトします。

header('Location: ' . $facebook->getLogoutUrl(array('next'=>URL_AFTER_LOGOUT))');

唯一の問題は、ユーザーが Facebook からもログアウトされていることです。

Javascriptを使用できる場合は、これを試してください:

<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
 FB.init({appId: '<?php echo FB_APPID;?>', status: true, cookie: true, xfbml: true});
 FB.Event.subscribe('auth.logout', function(response) {
    window.location.href='YOUR_LOCAL_LOGOUTSCRIPT';
 });
</script>
于 2010-11-28T10:35:20.873 に答える
0

私は同じ問題を抱えていて、上記のすべてを試しましたが、クッキーの名前が私が期待していたものではないのではないかと疑っていました。そのため、Cookie を印刷して、どの Cookie を削除するかを注意深く確認しました。

//print the cookies just to make sure what is the exact name of the cookie
foreach ($_COOKIE as $key => $value) {
    print $key . "=" . $value . "</br>";
}

//delete
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']);
}

この php スクリプトはFB.logout、js 部分でを呼び出した後に実行する必要があります。

function logout() {
    FB.init({appId: '[your app id]', status: true, cookie: true,xfbml: true});
    var flag = confirm("logout from your facebook account as well");
    if (flag) {
        FB.logout(function(response) { window.location='logout.php' });
    }
}
于 2011-12-14T08:31:08.380 に答える