PHP 7.2 Предупреждение: & quot; Невозможно изменить имя сеанса, когда сеанс активен & quot;

Так как PHP на нашем сервере был обновлен до 7,2 с 7,0. Я получаю следующее предупреждение (которое приводит к ошибке), если выполняется новое развертывание. Возможно, причина в том, что старые сеансы становятся недействительными после развертывания.

Предупреждение: session_name (): Невозможно изменить имя сеанса, когда сеанс
активный в
/var/www/html/model/login/lib/Session.class.php в строке 137

Предупреждение: session_set_cookie_params (): Невозможно изменить куки сеанса
параметры, когда сеанс активен в

/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 относительно сессий?

Почему нельзя устанавливать имя сеанса, если активен другой сеанс (в соответствии с документами с session_name я мог изменить сеансы и начать несколько сеансов)?

И как я могу соответствующим образом уничтожить запущенную сессию?

Проводя дальнейшие исследования, я также нашел следующее обсуждение на GitHub (https://github.com/Icinga/icingaweb2/issues/3185). Они подтверждают, что эта ошибка была введена в PHP 7.2. К сожалению, также нет ответа: — /

8

Решение

Я сделал отчет об ошибке на php.net, и они объяснили, что это не ошибка. Да, в PHP 7.2 теперь генерируется предупреждение. Однако это никогда не работало как задумано, это просто молча провалилась.

Для создания нескольких сессий необходимо использовать session_id(), Посмотрите на этот связанный вопрос: PHP Как я могу создать несколько сессий?

session_name() так же как session_set_cookie_params() всегда бессмысленны, если сессия уже запущена.

Для оригинального ответа посмотрите здесь: https://bugs.php.net/bug.php?id=75650&спасибо = 2

7

Другие решения

У меня была похожая проблема, но в конце концов я нашел выход. Код ниже был мой первый подход, который дал мне ошибки.

static function startmysession($lifetime, $path, $domain, $secure, $httponly){

session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly);
session_regenerate_id(true);

if(!isset($_SESSION)){
session_start();
}
}

Более ранние версии php упустили из виду нашу ошибку (мы практически переименовывали и давали сеанс с уже существующими свойствами, что очень неправильно. Итак, как я решил эту проблему?

static function startmysession($lifetime, $path, $domain, $secure, $httponly){
if(!isset($_SESSION)){
session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly);
@session_regenerate_id(true);
session_start();
}
}

Теперь я связал session_set_cookie_params() незадолго до начала сеанса, и я проверяю, существует ли сеанс, прежде чем сделать это.

3

У меня php7.2 после обновления, но с установленным mod_php56.
Таким образом, не было никаких проблем после того, как нашел это и заменил на mod_php72.
Надеюсь, это поможет.

-1
По вопросам рекламы [email protected]