タイトルにあるように、FacebookPHPSDKを使用しているサイトに問題があります。実際にログインしているのに、ログインしていないとページに表示されることがあります。
最近、JavaScript FB.getLoginStatus応答を出力する短いテストケースと、ログインしているかどうかを出力する短いPHPセクションを作成しました。
これが私のtests.php全体です
<?php
// The Facebook PHP SDK v3.2.2
require_once("../facebook/facebook.php");
$config = array();
$config["appId"] = "284773564887682";
$config["secret"] = "it's a secret";
$facebook = new Facebook($config);
// Get User ID
$user = $facebook->getUser();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta property="fb:app_id" content="<?php echo $facebook->getAppID(); ?>" />
<link rel="shortcut icon" href="/img/favicon.ico" type="image/x-icon">
<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js" type="text/javascript"></script>
<title>Rank: The Game - Test Cases</title>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<?php echo $facebook->getAppID(); ?>', // App ID
channelUrl : '//rankthegame.net/channel.php', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.getLoginStatus(function(response) {
document.getElementById('js').innerHTML = 'JavaScript response.status is: ' + response.status;
});
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
FB.Event.subscribe('auth.logout', function(response) {
window.location.reload();
});
// Additional initialization code here
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
</script>
<div id="js">
</div>
<div id="php">
<?php
if ($user) {
echo "PHP says we are logged in.";
} else {
echo "PHP says we are NOT logged in.";
}
?>
</div>
</body>
</html>
そして時々、私はこれを手に入れます:
だから私の質問は単純です。どうしたの?これを修正するにはどうすればよいですか?
最新のPHPSDK(v3.2.2)を使用しています。
私の現在の回避策は、これを検出したときにページのリロードを強制することです。これは通常、問題を解決します。