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

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

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

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

<*>

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

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

我唯一可以理解的是因为变量名 $ user $ _ SESSION ['user'] 数组键名相同,其作用如下:喜欢捷径等等。

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

另外,我知道直接访问 $ _ SESSION 变量不是最好的做法。我没有建立这个网站。我的工作只是修复一些东西并添加一些功能。

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

SESSION['user']['id'] = 123;

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

<*>

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

<*>

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

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

我唯一可以理解的是因为变量名 $ user $ _ SESSION ['user'] 数组键名相同,其作用如下:喜欢捷径等等。

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

另外,我知道直接访问 $ _ SESSION 变量不是最好的做法。我没有建立这个网站。我的工作只是修复一些东西并添加一些功能。

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

SESSION['user']['firstname'] = 'John';

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

<*>

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

<*>

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

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

我唯一可以理解的是因为变量名 $ user $ _ SESSION ['user'] 数组键名相同,其作用如下:喜欢捷径等等。

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

另外,我知道直接访问 $ _ SESSION 变量不是最好的做法。我没有建立这个网站。我的工作只是修复一些东西并添加一些功能。

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

SESSION['user']['lastname'] = 'Doe';

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

<*>

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

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

我唯一可以理解的是因为变量名 $ user $ _ SESSION ['user'] 数组键名相同,其作用如下:喜欢捷径等等。

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

另外,我知道直接访问 $ _ SESSION 变量不是最好的做法。我没有建立这个网站。我的工作只是修复一些东西并添加一些功能。

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

有帮助吗?

解决方案

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

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top