У меня есть приложение Facebook, которое зацикливается при запуске в IE. В других браузерах работает нормально.
Мне нужна ваша помощь для отладки, но перед этим мне нужно упомянуть, как я это реализовал.
FB рекомендует, чтобы, когда пользователь пытается получить доступ к приложению, мы перенаправили пользователя на страницу авторизации приложения. Оттуда FB будет перенаправлять (используя код 302) на URL, который нам нравится. В этом случае я прошу FB перенаправить на URL моего приложения с флагом appLogin=1
в строке запроса. Но наряду с этим FB добавляет в строку запроса действительно длинный параметр code
, что довольно уродливо. Итак, в этом случае я установил флаг LoggedIn
в своем сеансе PHP и перенаправил пользователя обратно на URL приложения, используя код JS window.top.location.href = <app url>
. Это очищает URL в адресной строке.
Это прекрасно работает в Firefox и Chrome, но в IE * флаг 1011 * отсутствует в сеансе после перенаправления кода со стадии appLogin
. На самом деле, похоже, что сессия PHP в этом случае была сброшена. Это сбивает с толку мое приложение, считая, что это первоначальный запрос, поэтому оно перенаправляет пользователя на страницу авторизации.
Надеюсь, вышесказанное имеет смысл. Действительно ценю любое понимание.
Update1:
По запросу. Вот фрагмент кода.
$reset = false;
$topRedirect = true;
if (isset($_REQUEST['appLogin'])) {
resetSession();
}
session_start();
$facebook = new Facebook(array(
'appId' => $AppId,
'secret' => $AppSecret,
'cookie' => true,
));
if (isset($_REQUEST['appLogin'])) {//Comes here when appLogin is set, i.e. we have just been redirected here from OAuth (authorization) page.
if (isset($_REQUEST['error'])) {
if ($_REQUEST['error_reason'] === 'user_denied') {
$msg = "You need to click on 'Allow', so that this App can fetch the data needed.";
$allowRetry = true;
include('error.php');
}
}
$authToken = $facebook->getUserAccessToken(); //This was originally protected. Made public for my purpose.
if ($authToken === false) {
//If no user token found and it wasn't even an error then this is totally unexpected.
$msg = "Totally unexpected error occurred!";
$allowRetry = true;
logErr($msg);
include('error.php');
}
$_SESSION['LoggedIn'] = 1;
$reset = false;
$url = $AppUrl; //We redirect again to clean the url.
include('redirect.php');
} else {
if (!isset($_SESSION['LoggedIn']) || $facebook->getUserAccessToken() === false) {
//If we are here then this is an initial request.
$reset = false;
$url = $OAuthUrl;
include('redirect.php');
}
}
$accessToken = $facebook->getAccessToken();
Update2:
Включенные файлы - redirect.php и error.php вызывают exit()
, когда их обработка завершена. Поэтому код после них не будет выполнен.