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

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

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

这是什么意思? 我如何在代码中追踪这个问题的根源?

基本上你有一个与会话同名的variables。 例如:

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

这将重现此错误。 您可以停止PHP试图find现有的variables,并通过将这些行添加到您的脚本警告你:

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

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

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

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表示这个错误也可能发生,当你将一个variables分配给尚未初始化的会话超全局时,例如

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

这是发现是什么导致警告的好信息,但我会build议不要closures欧文提到的警告。 这些运行时function在PHP 5.4.0中被删除,开发人员应该避免使用这些variables。

要解决这个问题,开发人员可能会很痛苦,但是如果有的话

 $_SESSION["user"] $user; 

将会话重命名为

 $_SESSION["sessuser"]; 

或者反之亦然,只要会话名称和variables名称不同。 想想这样:当你升级到最新的版本时,你将不得不debugging你的代码。

当您对.htaccess进行更改时,ini_set不起作用。 您将需要这样做:

 php_flag session.bug_compat_42 0 php_flag session.bug_compat_warn 0 

在我的情况下,php.ini从开到关

喜欢这个 :

 session.bug_compat_42 = off session.bug_compat_warn = off 

如果不工作,重新启动Apache