0

Google API PHP クライアント ライブラリを使用する Web アプリケーションを構築しています。このアプリケーションにより、ユーザーは Google 分析アカウントから分析データを取得できます。以下で説明することを除いて、すべてがどのように機能するかを説明します。

ステップ1

ユーザーはフォームでアカウント名を選択し、accounts.php ページからフォームを送信します。次に、そのアカウントのアカウント ID が SESSION 変数に保存されます。これが完了すると、accounts.php ページは location ヘッダーを使用して simple.php ページにリダイレクトされます。

ステップ2

simple.php ページには Connect me リンクが表示され、ユーザーはこのリンクを押して Google にログインし、分析からデータを取得します。このデータは、すべてのアカウントを取得します。次に、これらのアカウントは、アカウント ID セッション変数に対してループを実行します (ユーザーが accounts.php ページで選択した正しいアカウントの結果を取得するため)。

問題

問題は、Google が simple.php ページにリダイレクトすると、accounts.php に保存したすべてのセッション データが失われることです。アカウントIDをCookieに保存しても。Google PHP クライアント ライブラリがバックエンドで何らかの形でセッション データを消去していると思います。私は非常に多くのアイデアを試しましたが、それらはすべてうまくいかないようです。奇妙なことに、ログアウトするか、accounts.php に戻って再試行すると、Session 変数は Google リダイレクト後にアカウント ID データを保持します。混乱している!

私はそれをできるだけ明確にしたことを願っています

<?php
session_start();

 /*
if ($_SESSION['test'] != "logged" || $_SESSION['test'] == null) {

header('Location: http://www.xxxx.co.uk/');
die("Redirecting to home page");

}*/


header("Accept-Encoding: gzip");
header("User-Agent: gzip");
require_once 'src/apiClient.php';
require_once 'src/contrib/apiAnalyticsService.php';
$client = new apiClient();
$client -> setApplicationName("Google Analytics PHP Starter Application");

$client -> setClientId('xxxx');
$client -> setClientSecret('xxxx');
$client -> setRedirectUri('http://www.xxxx.co.uk/simple.php');
$client -> setDeveloperKey('xxxx');
$client -> setUseObjects(true);

$service = new apiAnalyticsService($client);

$table = array();

if (isset($_GET['logout'])) {
unset($_SESSION['token']);
}

if (isset($_GET['code'])) {
$client -> authenticate();
$_SESSION['token'] = $client -> getAccessToken();
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}

if (isset($_SESSION['token'])) {
$client -> setAccessToken($_SESSION['token']);
}

if ($client -> getAccessToken()) {



$accounts = $service -> management_accounts -> listManagementAccounts(array("fields" => "items(id,name)"));
print "<a class='login' href='index.php?logout=true'>Logout</a>";
//$accounts = $service -> management_accounts -> listManagementAccounts();

foreach ($accounts->getItems() as $account) {
    //var_dump($_SESSION['account_number']);
    if ($account -> getId() == $_COOKIE["test"]) {


        echo "</br>" . $account -> getName() . "</br>";
        $props = $service -> management_webproperties -> listManagementWebproperties($account -> getId());

        //foreach ($props->getItems() as $property) {

        $profiles = $service -> management_profiles -> listManagementProfiles($account -> getId(), "~all");

        foreach ($profiles -> getItems() as $profile) {
            $counter++;
            $table[$counter]['name'] = $profile -> getName();

            echo "</br>" . $profile -> getName() . "</br>";

            /*
             echo "<h1>Profiles</h1>";
             echo "<pre>";
             var_dump($profile);
             echo "</pre>";*/

            // Direct
            $data = $service -> data_ga -> get("ga:" . $profile -> getId(), $_SESSION['startdate'], $_SESSION['enddate'], 'ga:visits', array("segment" => "gaid::-7"));
            // Non Paid
            $data2 = $service -> data_ga -> get("ga:" . $profile -> getId(), $_SESSION['startdate'], $_SESSION['enddate'], 'ga:visits', array("segment" => "gaid::-5"));
            // Paid
            $data3 = $service -> data_ga -> get("ga:" . $profile -> getId(), $_SESSION['startdate'], $_SESSION['enddate'], 'ga:visits', array("segment" => "gaid::-4"));
            // Refferal
            $data4 = $service -> data_ga -> get("ga:" . $profile -> getId(), $_SESSION['startdate'], $_SESSION['enddate'], 'ga:visits', array("segment" => "gaid::-8"));

            /*
             echo "<h1>Non Paid Data</h1>";
             echo "<pre>";

             //var_dump($data);
             echo "<pre>";
             echo "<h1>Paid Data</h1>";
             echo "</pre>";

             //var_dump($data2);
             echo "<pre>";
             echo "<h1>Search Data</h1>";
             echo "<pre>";

             //var_dump($data3);
             echo "</pre>";
             echo "<h1>Referral Data</h1>";
             echo "<pre>";

             //var_dump($data4);
             echo "</pre>";*/

            $results1 = $data -> getTotalsForAllResults();
            $results2 = $data2 -> getTotalsForAllResults();
            $results3 = $data3 -> getTotalsForAllResults();
            $results4 = $data4 -> getTotalsForAllResults();

            foreach ($results1 as $result) {

                echo "Direct Traffic " . $result . "<br/>";
            }
            foreach ($results2 as $result) {
                $table[$counter]['nonpaid'] = $result;
                echo "Non Paid Traffic " . $result . "<br/>";
            }
            foreach ($results3 as $result) {
                echo "Paid Traffic " . $result . "<br/>";
            }
            foreach ($results4 as $result) {
                $table[$counter]['refferal'] = $result;
                echo "Refferal Traffic " . $result . "<br/>";
            }



        }

    } else {

        echo "This is not working";
        var_dump($_COOKIE["test"]);
    }

    $_SESSION['token'] = $client -> getAccessToken();

}


echo "<table class='data'>";


        foreach($table as $data)    {

            $total = $data['nonpaid'] + $data['refferal'];

            echo "<tr><td>".$data['name']."</td><td>".$total."</td></tr>";



    }

    echo "</table>";
} else {
$authUrl = $client -> createAuthUrl();
    var_dump($_COOKIE["test"]);
            print "<a class='login' href='$authUrl'>Connect Me!</a>";
}
?>
4

1 に答える 1

2

指定したリダイレクト URI がセッション Cookie の範囲内にあることを確認してください。

たとえば、 を指定しますが、最初に(no )'http://www.xxxx.co.uk/simple.php'経由でページにアクセスした場合、Cookie は範囲外である可能性があります。'http://xxxx.co.uk/simple.php'www.

これはセッションだけでなく、一般的な Cookie にも当てはまります。これは一読の価値があると思われるかもしれませ。関数を使用して、PHP セッション Cookie のさまざまなプロパティを制御できますsession_set_cookie_params()。ドメインを.xxxx.co.uk(先頭の.) に設定して、ルート ドメインとそのすべてのサブドメインで利用できるようにすることができます。

于 2012-10-03T09:38:07.307 に答える