以全局变量作为数据源的 PHP 会话副作用警告

我正在尝试托管一个提供给我的PHP网站。我看到这个警告:

警告:未知:您的脚本可能依赖于在 PHP 4.2.3 之前一直存在的会话副作用。请注意,会话扩展不会将全局变量视为数据源,除非启用了register_globals。您可以通过分别将session.bug_compat_42或session.bug_compat_warn设置为关闭来禁用此功能和此警告。在 未知0

这是什么意思?如何在代码中查找此问题的根源?


答案 1

基本上,您有一个与您的会话同名的变量。前任:

$_SESSION['var1'] = null;
$var1 = 'something';

这将重现此错误。您可以通过将以下行添加到脚本中来阻止PHP尝试查找现有变量并警告您:

ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);

这些值也可以在php.ini或.htaccess中设置


答案 2

这里似乎有一些有问题的可能性:

http://www.spiration.co.uk/post/1231/Your-script-possibly-relies-on-a-session-side-effect

说这样的案例:

$_SESSION['firstname']=$_REQUEST['firstname'];

将触发警告。

此外,我解释这个php bug内容:http://bugs.php.net/bug.php?id=41540 意味着当您将变量分配给尚未初始化的会话超全局时,也可能发生此错误,例如

//Start of script
$_SESSION['bob'] = $bob;

推荐