Проблема с сессией в PHP
Ситуация такая: был написан сайт и залит на хост, проблем с подключением к базе данных, сессией не было вообще. Стало необходимо перенести этот же сайт на другой домен. Я использовал рег.ру. Я создал копию всех файлов, отвязал домен от хоста, потом привязал нужный, зашёл в панель управления и залил свои файлы обратно(я ничего не менял в коде).
Захожу на сайт goodzone.site (ни в коем случае не реклама, проект лично для узкого круга лиц) и встречаю проблему, во первых:
Ignoring session_start() because a session is already active...
Погуглил в инете, нашёл решение, в месте ошибки я заменил простое подключение к сессии на подключение с предварительной проверкой:
<?php
session start() // БЫЛО
?>
<?php
// СТАЛО:
if(!isset($_SESSION))
{
session_start();
}
?>
Тут возникает сам вопрос, почему такого не было раньше, сайт работал целый месяц и подобной ситуации не возникало?
Давайте рассмотрим ситуацию дальше, может для опытного программиста появятся зацепки: У меня на сайте в начале каждого файла запускается сессия. По ходу пользования туда записываются ошибки по типу "неправильный логин или пароль", потом эти данные вытаскиваются; если пользователь регистрируется, то в сессию записывается его данные. А проблема вот в чём: некоторые данные должны записываться по ходу пользования, но почему-то на сайте сразу при запуске выдает ошибку, приведу пример:
Undefined array key "id" in ... on line 5
Хотя в файле нужный id запишется в сессию только после того, как пройдёт авторизация.
$id = $_SESSION['id'];
Весь код отрабатывал прекрасно на данном хосте до смены домена. Хочется отметить, что в путях проблем нет.
Я в бэкэнде пару месяцев, не могу понять, где зайцы прячутся в данной ситуации, тяжело описать суть проблемы чётко и понятно, поэтому использую такую подачу материала.
Ответы (1 шт):
Ваша проблема решаемая, у вас включен режим логирования и предупреждений, ошибок от PHP. Для того, чтобы этого избежать, отредактируйте файл .htaccess. Пропишите следующие строки:
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
Либо в коде сайта в самом начале выполните код:
error_reporting(0)
Также, можно отредактировать php.ini в случае доступа к этому файлу на сервере. Найдите данную настройку:
display_errors = on
и отключите ее, чтобы не видеть сообщения-нотисы о сессии и прочих ошибках. Хотя подчеркну, что такой подход только сокроет ваши текущие ошибки, которые выскакивают на новом сервере. Чтобы их решить и исправить правильно было разобраться с кодом сайта, устранить дублирование регистрации в сессии. Для того, чтобы помочь в этом, мне нужно больше информации о вашем коде касательно сессии. Возможно, нужно добавить проверки логина в сессии, задать время сессии и т.д. кроме того высока вероятность, что на сайте вашем уже были логические ошибки в коде, которые выявились только сейчас.