2011-03-05 7 views
0

FacebookのOAuthをログインメカニズムとして使用するPHPサイトを構築しています。問題は、ユーザーがログアウトして自分のサイトに戻ってきたときに、ユーザーが手動でページを更新するまで、サイトは少なくとも(少なくとも外観上)有効に記録されていることです。手作業での返信までFacebookのクッキーが保持されます

私はFacebook Cookieがリターンページがレンダリングを終了した後にのみ削除されるため、これが理由であると思われます。セッションの仕方に完全に精通しているわけではありません。 >サイトに戻ってリダイレクト(logout.php) - - > Facebookの にリダイレクト -

ユーザーは ログアウト>クリアローカルセッションを - > [ホームページ(index.phpを) にリダイレクト - まだ(>ページがレンダリングログイン) - >クッキーが削除されました - >手動リフレッシュ(index.php) - >ページのレンダリング(ログインしなくなりました)。

少し前にASP.NET MVCサイトで同様の問題が発生しました。私の修正は、ページがロードされた後、そして一旦クッキーが最終的に削除された後、JavaScriptでページを解析することでした。

私は何か間違っていると仮定して作業しています。 index.phpに、Facebookがリフレッシュせずにログアウトしていることを認識させるだけです。

私はheader()を使ってlogout.phpからindex.phpにリダイレクトします。

header("Location: index.php"); 

編集:私はサイドステップのキャッシングの問題に順にリダイレクトURLに現在の時刻を追加しようとしている 。これは助けにはなりません。

EDIT: FireCookieのCookieアクティビティを監視すると、ページがレンダリングされた後にAuth Cookieが削除されるという疑いがバックアップされます。 FireCookieはサーバー側で何が起こっているのか私にはわからないので、これは明らかに決定的なものではありません。

JS回避策: 現在の回避策は、ページの読み込み時に次のスニペットを実行することです。$ fbUidはFacebookのユーザーIDです。それはJavaScriptに依存しているので、理想的ではありません。

 FB.getLoginStatus(function(response) { 
      if (<?php echo $fbUid ? "true" : "false" ?> && response.session == null) 
       window.location.reload(); 
     }); 

おそらくcacheing問題リッチ

答えて

0

Delete facebook session cookie from my application on users logoutとSDKソースの助けを借りてクラックしました。

このコードスニペットをログアウトページに追加すると、認証が適切に削除されます。

$facebook = new Facebook(array(
    'appId' => FB_APP_ID, 
    'secret' => FB_SECRET, 
    'cookie' => true, 
)); 

$fbCookieName = 'fbs_' . $facebook->getAppId(); 

$domain = $facebook->getBaseDomain(); 
if ($domain) { 
    $domain = '.' . $domain; 
} 

setcookie($fbCookieName, '', time() - 3600, '/', $domain); 
$facebook->setSession(); 

コードは、クッキーを空にして、それを同時に期限切れにします。その後、セッションは明示的に削除されます。

リッチ

0

。それはブラウザに「新しい」ページとして表示されますので、リダイレクトでのクエリ文字列にいくつかのランダムに生成された値を追加します。のようなもの:新しいコピーを取得するためにブラウザを強制すべきである

header('Location: index.php?cachebuster=' . microtime(true)); 

、どの「ログインした」コンテンツをもはや持っていないでしょう。

+0

@Marc B入力のためにありがとう、しかしそれは動作しませんでした。私は本当に、ページがブラウザに渡されるまで、実際にはクッキーが残っていると思っています。 – kim3er

+0

次に、FirebugまたはHTTPFoxを使用して、リクエストのヘッダーを表示します。クッキーの表示と消滅を正確に確認することができます。 –

+0

@Marc Bこれは、ページがレンダリングされた後にのみクッキーが削除されると私に信じさせた原因です。 – kim3er

0

こんにちは、私は同じ、この問題を持っていますが、私はこの問題を解決する この FB.Event.subscribe( 'auth.login'、機能(応答){

window.locationのを使用して購入。 reload(); }); FB.Event.subscribe( 'auth.logout'、function(response){ window.location.reload(); });

ログインコードを記述する必要がある場合は、このスクリプトを追加してください。お楽しみください

関連する問題