我有一个Facebook iframe应用程序。一旦确认了应用程序授权,我就会从已签名的请求中获取一些数据并将其放入会话中:
<?php
session_start();
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
if(empty($data["user_id"])) {
echo("<script> top.location.href='$auth_url'</script>");
exit;
}
$_SESSION['fb_id'] = $data['user_id'];
?>
简单,对吧?所以现在用户可以与我的应用程序进行交互,最终用户操作会触发AJAX请求。我正在使用jQuery:
$.ajax({
type:'POST',
url:'include/handler.php',
data:'name=value',
success: function(msg) {
alert("Success: "+msg);
},
error: function(msg) {
alert("Fail: "+msg);
}
});
那么在handler.php中,我需要使用之前保存的会话值,但会话是空的。
<?php
session_start();
echo $_SESSION['fb_id'];
?>
显然这些代码片段已经过简化,但有人可以向我解释一下吗?我有一种感觉,我做了一些愚蠢的事情,但这是漫长的一天。
答案 0 :(得分:0)
$。AJAX({ ... cache:false, ... }); 如果您使用IE,这可能是IE缓存ajax请求时的问题。或者,如果facebook图表api请求与ajax请求同时运行,则可能存在一些时序问题。
答案 1 :(得分:0)
为什么不将Facebook ID传递给handler.php?
...
url:'include/handler.php?fb_id=<?php $_SESSION['fb_id']?>',
在handler.php中,检查会话和传递的变量。
答案 2 :(得分:0)
事实证明,这归结于我使用的共享托管环境的问题。无论出于何种原因,源自AJAX或Flash的请求都使用唯一的会话ID进行处理。修复只是转移到另一个托管服务提供商。