PHP会话变量快捷方式?

时间:2009-10-26 22:57:24

标签: php zend-framework session variables shortcuts

所以我在使用$_SESSION变量的PHP站点上进行一些维护。我开始看到一些非常非常奇怪的行为,经过几个小时的调试后我才想到这一点。举个例子,假设我有一个像这样的会话变量设置:

$_SESSION['user']['id'] = 123;
$_SESSION['user']['firstname'] = 'John';
$_SESSION['user']['lastname'] = 'Doe';

在脚本中的某一点,使用一些Zend类调用MySQL表:

$sql = "SELECT whatever FROM table";
$user = $db->fetchRow($sql);

现在这里是奇怪的开始...在进行了这个数据库调用之后,我的$_SESSION['user']数组值突然变为从数据库调用中检索的对象...

基本上:$_SESSION['user']现在与使用fetchRow DB方法检索的对象相同,该方法应该存储在变量$user中。我以前从未见过这个。

我唯一可以理解的是因为变量名$user$_SESSION['user']数组键名相同,它的作用类似于快捷方式等。

这是我之前从未听说过的某种奇怪的PHP Session快捷方式吗?

另一方面,我知道直接访问$_SESSION vars不是最佳做法。我没有建立这个网站。我的工作只是修复一些东西并添加一些功能。

更新:果然,register_globals已开启。谢谢你的快速帮助。难怪我看到了这种奇怪的行为。

2 个答案:

答案 0 :(得分:6)

听起来你在PHP.ini中将register_globals设置为On。关掉它应该解决这个问题。

如果您无权更改PHP.ini,则会讨论替代解决方案here

答案 1 :(得分:4)

检查register globals是否已开启。访问$_SESSION是安全访问会话数据的唯一方法。

注册全局变量是一项旧功能,可将全局变量转换为局部变量。问题是您无法安全地知道数据的来源。您可以使用get,post或cookie变量设置您在会话中所期望的内容。所以绕过安全很容易。

相关问题