PHP 7.2 警告:“会话处于活动状态时无法更改会话名称”
由于我们服务器上的PHP从7.0升级到7.2。如果完成新部署,我会收到以下警告(导致错误)。原因可能是,旧会话在部署后变得无效。
警告:session_name():当会话在第 137 行的 /var/www/html/model/login/lib/Session.class.php 处于活动状态时,无法更改会话名称
警告:session_set_cookie_params(): 当会话在第 138 行的 /var/www/html/model/login/lib/Session.class.php处于活动状态时,无法更改会话 cookie 参数
警告:无法修改标头信息 - 已由 /var/www/html/model/lib/Session 中 (输出从 /var/www/html/model/login/lib/Session.class.php:137 开始.class.php第 142 行的标头
似乎 PHP 7.2 在会话罪的上下文中变得更加严格。服务器似乎识别出无效的会话并尝试销毁这些会话。这是会话类的一部分:
/**
* 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 中引入的。不幸的是,也没有答案:-/