Поддержка PHP-сессии в Facebook AJAX-запрос - PullRequest
2 голосов
/ 23 марта 2011

У меня есть приложение iframe на Facebook.Как только авторизация приложения подтверждена, я получаю некоторые данные из подписанного запроса и помещаю его в сеанс:

<?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 голосов
/ 07 апреля 2011

Почему бы вам не передать handler.php идентификатор Facebook?

...
url:'include/handler.php?fb_id=<?php $_SESSION['fb_id']?>',

А в handler.php проверьте и сессию, и переданную переменную.

0 голосов
/ 13 октября 2011

Оказывается, это связано с проблемой среды общего хостинга, которую я использовал. По какой-либо причине запросы, исходящие из AJAX или Flash, обрабатываются с уникальным идентификатором сеанса. Решением было просто перейти на другого хостинг-провайдера.

0 голосов
/ 28 марта 2011

$. Ajax ({ ..., кеш: ложь, ... }); Если вы используете IE, это может быть проблемой, поскольку IE кеширует ajax-запросы. Или, если запрос API api graph facebook выполняется одновременно с запросом ajax, могут возникнуть проблемы с синхронизацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...