Так как PHP на нашем сервере был обновлен до 7,2 с 7,0. Я получаю следующее предупреждение (которое приводит к ошибке), если выполняется новое развертывание. Возможно, причина в том, что старые сеансы становятся недействительными после развертывания.
Предупреждение: session_name(): невозможно изменить имя сеанса, когда сеанс активен в/var/www/html/model/login/lib/Session.class.php в строке 137.
Предупреждение: session_set_cookie_params(): невозможно изменить параметры cookie сеанса, когда сеанс активен в/var/www/html/model/login/lib/Session.class.php в строке 138.
Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /var/www/html/model/login/lib/Session.class.php:137) в /var/www/html/model/login/lib/Session.class.php в строке 142
Похоже, что PHP 7.2 стал более строгим в контексте сеанса греха определенного контекста. Кажется, сервер распознает недопустимые сеансы и пытается их уничтожить. Это часть класса Session:
/**
* Secure instant destruction of session. Must be called after session_start !
*/
public static function destroyAbsolute() {
self::checkInit(); // unimportant
session_name(self::$name); // this is line 137
session_set_cookie_params(0, COOKIEPATH, null, self::$force_ssl_cookie, true);
if(session_id()) {
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), "", time() - 42000, COOKIEPATH);
}
unset($_COOKIE[session_name()]);
session_destroy();
}
}
Что изменилось в PHP относительно сессий?
Почему нельзя устанавливать имя сеанса, если активен другой сеанс (в соответствии с документами с именем_сессии, я могу изменить сеанс и запустить несколько сеансов)?
И как я могу соответствующим образом уничтожить запущенную сессию?
Проводя дальнейшие исследования, я также нашел следующее обсуждение на GitHub (https://github.com/Icinga/icingaweb2/issues/3185). Они подтверждают, что эта ошибка была введена в PHP 7.2. К сожалению, также нет ответа: -/