@Phillip Я считаю, что это действительно только для объектов JS. PHP-код выполняется на сервере и не зависит от браузера.
я есть приложение Facebook, которое зацикливается навсегда при запуске в IE. В других браузерах работает нормально.
Мне нужна ваша помощь, чтобы отладить это, но перед этим я должен упомянуть, как я это реализовал.
FB рекомендует, чтобы при попытке доступа к приложению пользователь перенаправлял пользователя на страницу авторизации приложения. Оттуда FB будет перенаправлять (используя код 302) на URL, который нам нравится. В этом случае я прошу FB перенаправить на URL моего приложения с флагомappLogin=1
в строке запроса. Но наряду с этим FB придает очень длинный параметрcode
в строке запроса, что довольно некрасиво. Итак, в этом случае я поставил флагLoggedIn
в моей сессии PHP и перенаправить пользователя обратно на URL-адрес приложения, используя код JSwindow.top.location.href = <app url>
, Это очищает URL в адресной строке.
Это отлично работает в Firefox и Chrome, но в IELoggedIn
флаг отсутствует в сеансе после перенаправления кода с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()
когда их обработка завершена. Таким образом, код после них не будет выполнен.