0

それで、私はこれにしばらく取り組んでいて、さまざまな質問をたくさんしましたが、まだ解決策はありません.

定期的にログインすると、すべて問題なく、期待どおりにログアウトできます。しかし、Facebook でログインする (アプリを承認する) 場合、ブラウザのメニューから手動で Cookie を削除しない限り、ログアウトする方法はありません。

そのロジックに従って、このコードを使用してログアウト アクションで Cookie を破棄したいと考えました (特定のケースでは、サブドメイン間で動作するようにセッション設定を変更した後)。

function logout() {
        if ($this->Cookie->read('Auth.User')) {
            $this->Cookie->delete('Auth.User');
        }
        $this->Auth->logout();
        unset($_SESSION['fb_MYAPP_ID_user_id']);
        unset($_COOKIE['fbm_MYAPP_ID']);
        unset($_COOKIE['fbsr_MYAPP_ID']);
        unset($_COOKIE['CAKEPHP']);
        //pr($_SESSION);pr($_COOKIE);exit(); //here I see that the cookies are in fact deleted
        $this->redirect($this->Auth->logout());
        $this->redirect('/login');
    }

ただし、ログアウトリダイレクトのたびに、ユーザーが元に戻り、ログインし、セッション/Cookieが再作成されます。

私は多くのSOの質問と回答を経験しましたが、どれもうまくいきませんでした。何か案は?

4

2 に答える 2

1

Cookie コンテナから Cookie を単純に設定解除することはできません。これは、リクエストに含まれる Cookie のサーバー側の表現にすぎません。

Cookie を削除するには、まったく同じ Cookie (ドメイン、パス、名前) を設定する必要がありますが、有効期限が過ぎています。これにより、クライアントが読み取ったときに、次の要求で Cookie が送信されなくなります。

これがどのように行われるかはhttps://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php#L132で確認できます。

于 2012-08-08T19:33:38.350 に答える
0

最終的に、次の回答を組み合わせて使用​​しました。

CakePHP + フェイスブック

$facebook->getSession() 呼び出しは、呼び出しの下のページを中断します

最初のコードはより完全ですが、時代遅れです。また、質問にある unset() 呼び出しも保持しましたが、今のところうまく機能しているようです。

于 2012-08-08T19:00:52.787 に答える