如果变量发生变化,PHP会话也会发生变化


PHP session changes if variable changes

我遇到了一个奇怪的情况:

首先,我将变量分配给会话,然后更改它。然后,当我更改变量时,会话也会更改,即使我没有将值重新分配给会话:

示例(session1.php)

session_start();
$var_test = "first session value";
$_SESSION['var_test'] = $var_test;
echo "$_SESSION['var_test'];
// this will show "first session value"

第二个php文件(session2.php)

session_start();
$var_test = "second session value !!!";
echo $_SESSION['var_test'];
// this shows "second session value !!!";

在session1.php中,它显示"第一个会话值",这是非常好的,但在第二个php文件(session2.php)中,它会显示"第二个会话值"。

即使我没有分配$_SESSION['var_test']=$var_test,它为什么会自动更改?

这是一个bug还是它的工作原理?

这可能是由php.ini中的register_globals=on引起的。(如果您使用的是旧的php版本)

在.htaccess文件(位于文档根目录)中尝试此操作:

php_flag register_globals off. 

(如果您有访问权限:请在php.ini中更改);

register_globals对于编写不好的php应用程序来说是一个安全威胁。