Facebook のサーバー側ログイン フローで SESSION 変数に値を割り当てることができません。
以前は、ヘッダーが既に渡されており、セッション変数を設定できないというエラーが発生していました。そのため、ページの先頭で開始された出力バッファリングを設定し、最後のセッション変数が割り当てられたらバッファをフラッシュします。$_SESSION['state'] と $_SESSION['access_token'] に null 値があるため、割り当てが機能していないようです
<?php ob_start(); session_start();
$app_id = "XXXXXXXXXXXXXXXXXXXX";
$app_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
$my_url = "http://mydomain.com".$_SERVER['PHP_SELF'];
$code = $_REQUEST["code"];
if(empty($code))
{
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); // CSRF protection
$dialog_url = "https://www.facebook.com/dialog/oauth?client_id=".$app_id
."&redirect_uri=".urlencode($my_url)."&state=".$_SESSION['state']."&scope=user_birthday,user_about_me,user_location,user_photos,friends_photos,email,user_website,friends_website,read_friendlists,publish_stream";
echo("<script> top.location.href='" . $dialog_url . "'</script>");
ob_end_flush();
}
if ($_GET['state'] === $_SESSION['state']) //Ignoring CSRF protection for the moment
// since I am unable to assign SESSION variables any value, I actually have this as
// if(200>150)/*
{
$token_url = "https://graph.facebook.com/oauth/access_token?"."client_id=".$app_id ."&redirect_uri=" . urlencode($my_url). "&client_secret=".$app_secret."&code=".$code;
$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$_SESSION["access_ token"] = $params['access_token'];
ob_end_flush(); // Session Varibale assigned, we can now flush output
$graph_url = "https://graph.facebook.com/me?access_token=".$params['access_token'] ;
$user = json_decode(file_get_contents($graph_url), true);
}
echo $params['access_token']."is the access token <BR> </BR>"; //this works fine, outputs Access token
echo $_SESSION['access_token']." is the access token" ; //Session Variables are not assigned value since $_SESSION['access_token'] is null
?>