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 137Warning: 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 138Warning: 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