【问题标题】:PHP Session Variable shortcuts?PHP会话变量快捷方式?
【发布时间】:2010-12-10 07:31:30
【问题描述】:

所以我正在使用$_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 已开启。感谢您的快速帮助。难怪我看到这种奇怪的行为。

【问题讨论】:

    标签: php zend-framework session variables shortcuts


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 2015-09-20
        • 1970-01-01
        • 2014-11-25
        • 1970-01-01
        • 2012-07-20
        • 1970-01-01
        相关资源
        最近更新 更多