8

私の現在のユーザー ストーリーは、user1 が私の Web サイトと Facebook にログインしているというものです (これらのアカウントは接続されています)。

User1 は自分のサイトからログアウトしますが、Facebook からはログアウトしません。

このユーザー 2 が自分のアカウントにログインした後、ユーザー 1 からの残りのセッションは、ユーザー 2 と私のサイトとのやり取りと、ユーザーが誰として投稿したかをねじ込みます。

したがって、これを修正するために、ログインしているユーザーが現在ログインしている Facebook を実際に所有しているかどうかを確認し (これにより、Facebook のログアウトなどが行われることになります)、ユーザーがログアウトできるようにするリンクが表示されます。 .

リンクをクリックすると、Facebook に移動し、サイトに戻ります。しかし、新しいタブを開いて facebook にアクセスすると、User1 はまだログインしています。

このリンクを機能させるにはどうすればよいですか..何が起こっているのですか。これはAPIのバグですか、それとも何ですか? ...

編集:値のユーザー ID の読み込みと有効なアクセス トークンを使用してテストを続けましたが、ログアウト リンクを機能させるにはまだ必要です。

4

3 に答える 3

5

少し遅れましたが、ここに私の貢献があります:

ログアウト URL を生成するときに params を使用すると、Facebook API 関数を使用してセッションを破棄するページにリダイレクトされます。

ここに例があります:

$logoutUrl = $facebook->getLogoutUrl(array("next" => "http://mydomain.com/page4logout"));

page4logout では、facebook オブジェクトをインスタンス化し、以下を実行できます。

$facebook->destroySession();

その後、リダイレクトを行うことができます。

于 2012-11-22T20:26:36.453 に答える
4

Facebook の Cookie とセッションを手動で削除します。これが私の解決策です。以前に問題を解決した方法です。Facebookのバグだと思います:

setcookie('fbs_'.$this->getAppId(), '', time()-100, '/', $_SERVER["SERVER_NAME"]);
unset($_SESSION['fb_'.$this->getAppId().'_code']);
unset($_SESSION['fb_'.$this->getAppId().'_access_token']);
unset($_SESSION['fb_'.$this->getAppId().'_user_id']);
unset($_SESSION['fb_'.$this->getAppId().'_state']);

$this->getAppID は Facebook アプリ ID です。明確にする必要があります ;o)

于 2012-05-31T15:27:13.843 に答える
0

これを確認する 1 つの方法は、PHP SDK と JavaScript SDK を一緒に使用することです。

ユーザーがサイトにアクセスしたら、FB.getLoginStatus() を呼び出しauthResponse.userIDて、PHP SDK が返す内容と一致することを確認します$facebook->getUser();(これが役立つ場合は、AJAX 呼び出しを介してこれを行うことができます)。

ユーザー ID が一致しない場合は、何か問題があることがわかります。$facebook->getLogoutUrl() を呼び出すと、ユーザーはサイトと Facebook の両方からログアウトするはずですが、そうでない場合はsession_destroy()、コードで を使用してセッションをクリアしてみてください。次に、ユーザーを $facebook->getLoginUrl() にリダイレクトし、再度ログインさせます。これにより、ユーザー ID の不一致が修正され、ユーザーがサイトに戻ってきたときにプロセスを繰り返すことができます。

これが他のアプリで発生するのを見たことがあるので、これは Facebook の問題だと思います。JavaScript SDK は、Cookie がまだ有効かどうか (既に存在する場合) を確認していないようです。

于 2012-06-01T16:08:42.830 に答える