编程语言
首页 > 编程语言> > PHP 7.2警告:“会话处于活动状态时无法更改会话名称”

PHP 7.2警告:“会话处于活动状态时无法更改会话名称”

作者:互联网

由于我们服务器上的PHP从7.0升级到7.2.如果完成新部署,我会收到以下警告(导致错误).原因可能是旧会话在部署后失效.

Warning: session_name(): Cannot change session name when session is
active in
/var/www/html/model/login/lib/Session.class.php on line 137

Warning: session_set_cookie_params(): Cannot change session cookie
parameters when session is active in

/var/www/html/model/login/lib/Session.class.php on line 138

Warning: Cannot modify header information – headers already sent by
(output started at
/var/www/html/model/login/lib/Session.class.php:137) in
/var/www/html/model/login/lib/Session.class.php on line 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引入了这个错误.不幸的是,也没有答案: – /

解决方法:

我在php.net上做了一个bug报告,他们解释说这不是一个bug.在PHP 7.2中是,现在生成警告.然而,这从未按预期工作,它只是默默地失败了.

要创建多个会话,需要使用session_id().看看这个相关的问题:PHP How can I create multiple sessions?

如果会话已在运行,则session_name()以及session_set_cookie_params()始终是无意义的.

原始答案请看这里:https://bugs.php.net/bug.php?id=75650&thanks=2

标签:php-7-2,php,cookies,session
来源: https://codeday.me/bug/20191006/1860190.html