Последняя версия Firefox 63.0 как для Mac, так и для Windows каким-то образом сломала логин, который я создал для административного бэкенда моего сайта электронной коммерции. Ранее это работало нормально. Я использую PHP.
При успешном входе в систему с действительными учетными данными $_SESSION['admin_logged_in']
переменная установлена в TRUE
и я правильно вошел в систему и перенаправлен на стартовую страницу. Однако когда я пытаюсь перейти на любую другую страницу внутри сайта администратора, я сразу же выхожу из системы, как если бы переменная сеанса внезапно была потеряна.
На каждой странице в самом начале, включая начальную страницу, у меня есть сценарий короткой проверки входа, который выглядит следующим образом:
<?php
//start session
session_start() ;
//check user is logged in
if (($_SESSION['admin_logged_in'] !== TRUE) || (!isset($_SESSION['admin_logged_in']))) {
header("location: /index.php") ;
$_SESSION['admin_reason'] = "illegal" ;
exit;
}
?>
Возможно, я думал, что это ошибка в Firefox, однако недавно я также вышел из системы, обычно после навигации по нескольким страницам, в последней версии Safari для iOS 12 и MacOS Mojave.
В настоящее время работает и нет проблем на Opera или Chrome (проверено на Mac).
Я попытался очистить кэш в Firefox и настроить параметры конфиденциальности, но не повезло. Я говорил с моими веб-хостами, и они не знают ни о каких проблемах или изменениях на стороне сервера.
Но если бы была проблема с кодом PHP и переменными сеанса, поскольку это обрабатывается на стороне сервера, предположительно, это не будет работать ни в одном браузере, а также не работало ранее?
Благодарен за любые предложения.
Мне удалось решить эту проблему, см. Мой ответ ниже.
Мне удалось решить это самому.
Для пояснения: проблема в Firefox версии 63.0 на Mac и Windows, Safari версии 12.0 на MacOS Mojave и Safari на iOS 12.0.1. Другие протестированные браузеры, Chrome и Opera, были в порядке.
Я провел некоторое тестирование с базовым набором страниц и обнаружил, что в Firefox на всех страницах, следующих за любой устанавливаемой переменной сеанса PHP, он не был доступен / не существовал. Safari обычно терял его после навигации по нескольким страницам.
Затем я обнаружил следующую страницу старого поста в ссылках на форумы Mozilla:
https://bugzilla.mozilla.org/show_bug.cgi?id=263057
Я проверил инструменты разработчика и обнаружил, что эти браузеры, каждый раз в случае Firefox и каждые несколько страниц в случае Safari, запрашивали favicon.ico и получали ответ 404, поскольку у меня его там не было. По какой-то причине это нарушало переменные сеанса PHP. Я не понимаю, почему.
Поэтому исправление было просто поместить favicon.ico в корневой каталог веб-сайта.
Спасибо за ваши Коментарии.
Возможно, это связано с новой политикой безопасности, которая блокирует некоторые JavaScript или другие ресурсы, используемые в вашей системе входа в систему.
Проверьте веб-консоль Firefox https://developer.mozilla.org/en-US/docs/Tools/Web_Console/Opening_the_Web_Console
Вы можете иметь такие сообщения, как:
Content Security Policy: Ignoring “'unsafe-inline'” within script-src: ‘strict-dynamic’ specified
Content Security Policy: Ignoring “https:” within script-src: ‘strict-dynamic’ specified
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://XXX. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
Увидеть https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS