PHP 设置普通变量 更改会话变量

Posted

技术标签:

【中文标题】PHP 设置普通变量 更改会话变量【英文标题】:PHP Setting Normal Variables Changing Session Variables 【发布时间】:2012-12-14 20:15:40 【问题描述】:

我突然开始遇到我所见过的最奇怪的问题,除了我网站的主机之外什么都没有改变。我在代码中使用了很多 $_SESSION 变量,这些变量可能与普通变量同名,但设置普通变量似乎是在更改具有相同名称的 $_SESSION 变量。

例如,如果我这样做

$_SESSION['favcolor'] = 'blue';
$favcolor = 'green';
echo $_SESSION['favcolor'];

我得到green 作为响应...我如何不让这种情况发生?我认为很可能有一些 php ini 变量必须更改,但我似乎在这方面找不到任何东西......


解决方案

因此,由于我在不同的主机上托管我的网站,因此我必须按照以下方式进行操作。我创建了一个php.ini 文件并将其放在我网站文件的根目录中,其中仅包含以下行:

register_globals = Off ;notice the capital 'O' in 'Off'

然后在我的 .htaccess 文件中,我将其添加到文件末尾:

<IfModule mod_suphp.c>
suPHP_ConfigPath /home/myhostusername/public_html/stumpyinc.com
<Files php.ini>
order allow,deny
deny from all
</Files>
</IfModule>

不再有冲突的变量!我也从这次经历中学到了一些东西,并做了一些进一步的研究;变量和会话变量无论如何都不应该相同。这是一个很好的实践,我将在接下来的编程中开始使用它。

【问题讨论】:

【参考方案1】:

看起来register_globals 已打开。这将导致像你正在经历的冲突。您的主机可能在配置服务器时忘记关闭它们。一旦他们这样做了,您的问题就会消失。

如果他们拒绝将其关闭,请寻找新的主机。 register_globals 不仅应该被关闭,而且它们已被弃用,并将在下一版本的 PHP 中删除。

【讨论】:

如果他们拒绝,您也可以尝试使用ini_set("register_globals",0);关闭它 @BrendanScarvell Please note that register_globals cannot be set at runtime (ini_set()). Although, you can use .htaccess if your host allows it as described above. An example .htaccess entry: php_flag register_globals off. 该死...这真的把我的代码弄乱了,因为我所有的网站都有与普通变量相同的会话变量。我尝试在 .htaccess 中添加标志,但我的新主机不允许我添加这样的行;他们只是在加载任何页面时抛出 500 错误 我在回答中为我的问题添加了一个精确的解决方案,感谢您让我到达那里!

以上是关于PHP 设置普通变量 更改会话变量的主要内容,如果未能解决你的问题,请参考以下文章

每当我重新加载页面时,仍会设置取消设置 PHP 会话变量 [重复]

PHP超级全局变量——Session 变量

取消设置 php 会话变量

在 PHP 中使用 javascript 设置会话变量

未设置时的php会话变量问题

为啥不会/如何对 PHP 会话变量进行排序而不是取消设置