PHP会话变量与局部变量互换?

时间:2010-09-23 15:33:33

标签: php session variables local

我在php中遇到了一个关于会话变量和局部变量的奇怪问题。

我正在试图弄清楚我是不是对php中的会话有所了解,或者这是我主持人使用的php版本的问题。

这是一个非常简单的代码来演示这个奇怪的问题:

session_start();  
var_dump($kenny);  
var_dump($_SESSION['kenny']);  
$_SESSION['kenny']='def';  
var_dump($kenny);  
var_dump($_SESSION['kenny']);  
$kenny = 'abc';  
var_dump($kenny);  
var_dump($_SESSION['kenny']);  

第一次运行代码时,我得到以下结果(正如人们所期望的那样):

NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def"

我第二次运行它(当然没有关闭我的浏览器),我现在就知道了!

string(3) "def" string(3) "def" string(3) "def" string(3) "def" string(3) "abc" string(3) "abc" 

我在第3次,第4次,第5次运行,依此类推,我得到了这个!!!

string(3) "abc" string(3) "abc" string(3) "def" string(3) "def" string(3) "abc" string(3) "abc" 

在我看来,会话变量'kenny'和局部变量$ kenny在多次运行脚本后成为一个和另一个的别名。嗯......我真的不认为这是会话变量和局部变量在php中的工作方式。如果我在这里遗漏了什么,请纠正我。

我的网站主机正在运行php 5.2.2。当我在运行php 5.2.1,5.2.14和5.3.1的其他主机上尝试这个完全相同的代码时,他们总是给我我期望的东西:

第一次

NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def"

此后

NULL string(3) "def" NULL string(3) "def" string(3) "abc" string(3) "def" 

我检查了php.net上的更改日志,但没有找到任何可以解决此问题的内容。但正如我所提到的,早期的版本(5.2.1)工作正常,所以这对我来说非常令人费解。

如果有人运行任何其他版本的php 5.2.x,请试一试,如果您看到同样的问题,请告诉我。或者,如果有人对此问题有任何见解,我真的很感激任何反馈。

万分感谢!

1 个答案:

答案 0 :(得分:1)

这可能是因为register_globals指令已启用。它没有在该页面上说明$_SESSION个变量,但它说here

  

如果启用了register_globals,那么   全局变量和   $_SESSION条目将自动生效   引用相同的值   在前一届会议上注册   实例。但是,如果变量是   由$_SESSION注册然后   自从以来全局变量可用   下一个请求。