私の意見では、ユーザーが既にFacebookからログアウトしている間は、あなたのアプリがサインインしたままにならないとは思わない。
これが望ましくないシナリオの1つは、公共のコンピュータからアプリを使用している場合です。私がFacebookからログアウトすると、あなたのアプリはまだ私を "覚えている"。そして今、このコンピュータを使用する人はあなたのアプリの中で私のFacebookの身元を引き受けます。
ここの問題は、ユーザーのFacebookのログインステータスを覚えておくために自分のCookieを設定することだと思います。明らかに、ユーザーがFacebook自体からサインアウトすると、あなたのクッキーはクリアされません。だからこの時点であなたのクッキーはFacebookのステータスと同期していません。
ユーザーのFacebookログインステータスを覚えておくために、自分のCookieを使用しないことをお勧めします。この目的のためにFacebook自身に常に頼ってください。
一般的な戦略は、ユーザーがあなたのアプリに来るたびにFacebookが提供する仕組みを使ってFacebookのログイン状況を確認することです。このようにして、あなたのアプリはユーザーのログイン状態に関してFacebookと同期します。
私は個人的にこのコードを使って、ユーザーのログインのためにFacebook Javascript APIを呼び出します。
/*
* Init code for Facebook connect
*/
window.fbAsyncInit = function() {
FB.init({
appId : FACEBOOK_APP_ID,//App ID
channelUrl : CHANNEL_URL,//Channel File
status : true,//check login status
cookie : true,//enable cookies to allow the server to access the session
xfbml : true, //parse XFBML
oauth : true
});
//check facebook login status
FB.getLoginStatus(function(response) {
console.log("FB login status: " + response.status);
if (response.status === 'connected') {
showWelcome(); //display welcome message
} else if (response.status === 'not_authorized') {
//the user is logged in to Facebook, but not connected to the app
showFbLogin(); //display Facebook Login button
} else {
//the user isn't even logged in to Facebook.
showFbLogin(); //display Facebook Login button
}
});
//subscribe to facebook events
FB.Event.subscribe('auth.authResponseChange', function(response) {
fbAuthResponseChanged(response);
});
};