1

タイトルにあるように、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>

そして時々、私はこれを手に入れます:

JSが接続されています-PHPが接続されていません

だから私の質問は単純です。どうしたの?これを修正するにはどうすればよいですか?

最新のPHPSDK(v3.2.2)を使用しています。

私の現在の回避策は、これを検出したときにページのリロードを強制することです。これは通常、問題を解決します。

4

0 に答える 0