Любопытная проблема.
Недавно разработанный сайт, использует стороннюю систему входа в систему, которая использует сессии (сюрприз!). Сайт отлично работает во всех случаях, во всех браузерах Кроме Internet Explorer 11 (и, возможно, предыдущие версии, не проверены).
Header
не делает перенаправление на каждой затронутой странице_
в доменном имени или URL.а) На каждой странице есть файл контроллера с информацией заголовка:
header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
header("Expires: Thu, 19 Nov 2011 08:52:00 GMT"); // Date in the past
header('Content-Type: text/html; charset=utf-8');
header("X-Clacks-Overhead: GNU Terry Pratchett");
header_remove("X-Powered-By");
header("X-XSS-Protection: 1; mode=block");
header("X-Frame-Options: SAMEORIGIN");
header("X-Content-Type-Options: nosniff");
header("Content-Language: en");
header("Content-Security-Policy: upgrade-insecure-requests;");
header("Referrer-Policy: origin-when-cross-origin"); //referrer for Chrome
header("Referrer-Policy: strict-origin-when-cross-origin");
if (isset($_SERVER['HTTP_USER_AGENT']) &&
(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)){
header('X-UA-Compatible: IE=edge,chrome=1');
}
б) Как часть этого процесса; проверка файлов cookie выполняется, чтобы узнать, включены ли файлы cookie в браузере клиента. Это сделано через и то и другое логин / доступ контролируемый и общедоступный участки сайта.
if($_COOKIE['cookieEnabled'] !== "yes") {
\setcookie('cookieEnabled', "yes", time() + 42000, "/", $_SERVER['HTTP_HOST'], true, true);
}
Все, что это, это cookie, который говорит «да», куки включены, если cookie еще не установлен. Просто.
с) Ниже этого; есть код контроллера для загрузки переменных сеанса и выполнения других действий для сторонних администраторов.
// Create / Include the Session Object - Session.php
$session = new Session($db);
г) Я установил тестовый статус в Session.php
__construct
сделать это:
session_start();
if($_COOKIE['cookieEnabled'] !== "yes" && empty($_SESSION)) {
error_log("INFO: An access attempt without a session or cookie was attempted...");
if($_COOKIE['cookieEnabled'] !== "yes"){
error_log("Cookie does not appear to be enabled");
}
die("unimportant debug error");
}
Обратите внимание, что массив сессии никогда не будет пустым, так как он предварительно заполнен на предыдущих страницах;
е) [Local] PHP.ini, таким образом:
session.cookie_secure=1
default.charset=utf-8
error_log=/home/domainaccount/error/PHP_error.log
session.save_path=/home/domainaccount/sessionz
session.cookie_domain=domain.org.uk
НОТА: Веб-путь:
/home/domainaccount/public_html/
Значения PHP.ini были проверены с phpinfo()
и установлены правильно.
Я загружаю веб-сайт в различных браузерах, и он входит в систему просто отлично, все работает, данные сессии переносятся.
Однако на IE11 это не так. Он просто возвращается с пустым экраном, без ошибок, без обратной связи (данные сеанса, возвращаемые на страницу входа), и нет журналов ошибок на основе кода.
Журнал ошибок показывает:
ИНФОРМАЦИЯ: Попытка доступа без сеанса или файла cookie была предпринята …
Целую кучу раз, но никаких признаков того, что печенье отказано, просто сеанс.
Неудивительно, что на странице входа есть header
Перенаправление местоположения для успешных и неудачных попыток входа в систему.
Номер версии IE: 11.248.16299.0.
Настройки файлов cookie IE: принимаются сторонние файлы cookie, сторонние файлы cookie, всегда разрешать сеансовые файлы cookie.
1) Почему это происходит ТОЛЬКО для IE?
2) Как я могу решить эту проблему (изменить заголовки, настройки файлов cookie и т. Д.?)
Некоторые версии IE молча отбрасывают куки, если время сервера прошло, по сравнению с временем клиента. Правильная настройка времени сервера / клиента может помочь.
Это ужасно — серверы будут гораздо более точными хронометристами, чем клиентские браузеры. Вы можете сослаться на это вообще?
Я сталкивался с этим однажды в описании от кого-то еще на GitHub и это исправило мою проблему.
В качестве примечания: поскольку вы явно не указали никаких подчеркиваний в домене, знаете ли вы, что начальные цифры также являются недействительными URL-адресами в соответствии с RFC, и IE также имеет проблемы с ними?
Других решений пока нет …