在Facebook AJAX请求中维护PHP会话

时间:2011-03-23 18:37:40

标签: php jquery ajax facebook session

我有一个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'];
?>

显然这些代码片段已经过简化,但有人可以向我解释一下吗?我有一种感觉,我做了一些愚蠢的事情,但这是漫长的一天。

3 个答案:

答案 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进行处理。修复只是转移到另一个托管服务提供商。