【发布时间】:2011-07-21 13:35:47
【问题描述】:
我有一个 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'];
?>
显然这些代码 sn-ps 被简化了,但是任何人都可以向我解释一下吗?我有一种感觉,我在做一些愚蠢的事情,但这是漫长的一天。
【问题讨论】:
-
ajax 调用是否使用同一个会话?每次获取一个新会话都会显示为 fb_id 变量没有“粘”,因为它是在其他会话中设置的。
-
我不得不假设他们不是昨晚,最终完全放弃了会议。我已经通过完全不使用 session 解决了这个问题,但我仍然很感激能解释为什么会发生这种情况。
标签: php jquery ajax facebook session