2012-11-30 179 views
1

我遇到了一个奇怪的PHP会话问题。有人可以告诉我,这是如何会议的作品?更改PHP会话变量

要查看问题,请将以下代码加载到任何php文件中,比如说test.php,并运行它2次。注意,您必须运行两次,即加载页面并重新加载。

<? 
session_start(); 
$_SESSION["test"] = "Original////"; 
$test=$_SESSION["test"]; 
echo $_SESSION["test"]; 
$test="New////"; 
echo $_SESSION["test"]; 
?> 

我的服务器上,我第一次加载该测试页面,我得到

原始////原始////

那是正确的。但是,当我重新加载它,我得到

原始////新////

这意味着5号线“$测试=”新////“;”实际上重写我的$ _SESSION [“测试”]。这对我来说没有意义。任何人都知道发生了什么?或者它只是在我的服务器上发生?

+1

这确实不应该发生。这是整个代码吗?任何地方都没有参考?更多的代码会在以后更改值? – deceze

+0

想不到会发生的原因,除非您只给了我们一段代码... – Chris

+3

请确保您的服务器上未启用register_globals。 –

回答

6

似乎在您的服务器上启用register_globals。您需要禁用该指令。

+3

很好的捕获,只要我已经看到一台服务器,你就再也不考虑它了。 – 2012-11-30 10:50:30

+2

@Dagon去年被抓住了。主机有一个“错误配置”。我只想说,在我想出来之前,我把头发拉出了一会儿。 –

1

首先,请不要使用<?作为PHP的起始标签,请使用<?php。其次,如果您启用了register_globals,则这是预期的行为。看看这个链接:

http://www.theblog.ca/session-register-globals

它的标题说:

当register_globals的是,会话变量覆盖全局变量

和示例代码与你相似:

<?php 
session_start(); 
$canadaday = 'July 1st'; 
$_SESSION['canadaday'] = 'July 2nd'; 

print '<p>When is Canada Day?</p>'; 
print '<p><strong>' . $canadaday . '</strong></p>'; 
?> 

Wit h register_globals,结果为July 2nd。 HTH。

-2
<?php 
session_start(); 
$_SESSION["test"] = "Original////"; 
$test=$_SESSION["test"]; 
echo $_SESSION["test"]; 
$test="New////"; 
echo $_SESSION["test"]; 
?> 

我曾尝试你的代码在我的环境中其运行perfectly.its总是打印原始////原始//// 所以它只能在服务器上发生

+0

-1,你没有启用'register_globals',这就是为什么它“适合你”。 –