Это потому, что Facebook теряет все переменные аутентификации и не в состоянии определить, что одновременные запросы принадлежат к одной и той же сессии, что приводит к «вспыхивает» из фрейма и заканчивая на ваших собственных страницах сервера, а не внутри Facebook.
В любое время, когда страница подается через Facebook, запрос, полученный на вашем сервере, будет включать в себя ряд переменных GET, посланных Facebook, эти переменные известны под общим названием «Подпись подлинности Facebook», которая доказывает вашему серверу, что запрос действительно действителен и исходит от Facebook; Аналогично, когда ваш сервер отправляет ответ, включение этих переменных доказывает Facebook (комбинацией session_key, api_key и sig digest), что ваш сервер является приложением, которое, по его утверждению, является.
Чтобы сохранить сеанс в вашем приложении iframe без выхода на сервер, вы должны включить эти параметры в строку запроса каждой ссылки. Вот простая функция, которая будет производить строку запроса для вас, так что вам просто нужно добавить результат этой функции для каждого URL ссылок в приложении:
function fb_sig_urlQueryString() {
$query = '';
foreach ($_GET as $k => $v) {
if (strpos($k, 'fb_sig') === 0) {
if ($i++ > 1) $query .= '&';
$query .= $k.'='.$v;
}
}
return $query;
}
ба-бах! ударный удар – mcintyre321