2012-11-30 214 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',這就是爲什麼它「適合你」。 –