当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《PHP会话副作用警告,全局变量作为数据源》经验,为你挑选了3个好方法。

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

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

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



1> Owen..:

基本上你有一个与你的会话同名的变量.例如:

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

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

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

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


对于那些不太适合修改php.ini文件的人来说,上面的格式不是你使用的.它应该是一行上的"session.bug_compat_42 = 0"和另一行上的"session.bug_compat_warn = 0"(没有引号).不过,首先在php.ini文件中进行搜索.它们可能都已定义为1,您只需要切换到0即可

2> Kzqai..:

这里似乎有一些问题:

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;



3> Ian..:

这是关于找出导致警告的原因的好信息,但我建议不要关闭Owen提到的警告.这些运行时函数在PHP 5.4.0中被删除,开发人员应该开始避免使用这些变量.

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

$_SESSION["user"]
$user;

将会话重命名为

$_SESSION["sessuser"];

只要会话名称和变量名称不同,或者反之亦然.可以这样想:升级到最新版本时,无论如何都必须调试代码.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有