所以我對Facebook開發和PHP開發相當新,所以請裸露。關於使用PHP的Facebook會話的基本問題
我創建了一個iframe Facebook應用程序。我毫不費力地抓取已簽名的請求並使用該信息在我的頁面上執行基本任務。
真正的問題發生在我開始在Facebook內導航我的應用程序時。我似乎失去了我的簽名請求信息。
我有我的PHP代碼包含在每個頁面上,我仍然不能保留我的簽名請求或會話....無論它被稱爲。
我粘貼了下面的基本PHP代碼。
<?php
include_once "../lib/facebook.php";
$facebook = new Facebook(array(
"appId" => FACEBOOK_APP_ID,
"secret" => FACEBOOK_SECRET_KEY,
"cookie" => true,
"domain" => SERVER_DOMAIN
));
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode(".", $signed_request, 2);
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
if (strtoupper($data["algorithm"]) !== "HMAC-SHA256") {
error_log("Unknown algorithm. Expected HMAC-SHA256");
return null;
}
// check sig
$expected_sig = hash_hmac("sha256", $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log("Bad Signed JSON signature!");
return null;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, "-_", "+/"));
}
session_start();
if (isset($_SESSION['fb_data'])) {
$data = $_SESSION['fb_data'];
} else {
$data = parse_signed_request($_REQUEST["signed_request"], FACEBOOK_SECRET_KEY);
$_SESSION['fb_data'] = $data;
}
session_write_close();
$page_id = $data["page"]["id"];
$like_status = $data["page"]["liked"];
?>
我對Facebook API沒有經驗,但在腳本中沒有看到任何會話保存的內容。除非將數據保存到$ _SESSION數組,否則它將在另一個請求中丟失。 – 2011-05-18 14:07:50
所以也許如果我做這樣的事情: <?php session_start(); $ _SESSION ['fb_data'] = $ data; ?> 然後,我將能夠訪問$ fb_data以獲取頁面ID和類似狀態? – Smccullough 2011-05-18 14:10:45
我想是的。如果你做$ _SESSION ['fb_data'] = $ data;那麼你可以做$ data = $ _SESSION ['fb_data'];在另一個PHP腳本中。但是,我不知道Facebook API的一些事情,因此可能會有所不同。 – 2011-05-18 14:14:08