2012-01-20 191 views
2

我的一個PHP頁面(運行在遠程服務器上,據稱安裝了PHP 5.2),會收到帶有一組「密碼」鍵的POST請求,然後,最奇怪的事情可能會發生。在下面的代碼中,POST請求的「密碼」被重新定義,以便爲你們更簡單地進行價值跟蹤,但是在測試中它仍然會產生註釋中指示的超自然輸出。爲變量賦值會更改會話變量的值

$_POST["passcode"] = "hi"; 
$_SESSION["passcode"] = "hello"; 

echo $_SESSION["passcode"] . '<br />'; // prints "hello" 
$passcode = $_POST["passcode"]; 
echo $_SESSION["passcode"] . '<br />'; // prints "hi" 

編輯:所以看起來它是關於register_globals的。因此是另一個問題:

如果我沒有權限訪問服務器上的php.ini文件,是否有任何方法可以關閉此行爲?

+0

在接收文件中只有那些結果,或者是通過整個現有代碼? – MetalFrog

+0

@MetalFrog接收PHP文件的POST是目前爲止我測試過的唯一地方。 –

+0

這很奇怪。
當你註釋掉第五行時,它是否一樣? –

回答

7

聞起來像register_globals

如果你不能編輯php.ini文件,你可以在.htaccess文件中禁用此設置,如所描述here

+0

謝謝。但是這在我的帖子中誕生了另一個問題... –

+0

我已經更新了我的回答 – Mchl

8

顯然,會話變量被註冊爲全局變量。

+0

也謝謝你們。 –

+0

不客氣。對不起,我沒有看到「另一個問題」:) –

2

一個可能的原因有可能是什麼地方你寫

$_SESSION['passcode']=&$passcode; 
+0

非常確定,我沒有在我的代碼中的任何地方做到這一點。 –

+0

然後會話變量被註冊爲全局變量......正如其他人告訴的那樣...... –

2

會話變量可能被配置爲作爲全局變量處理,因此可以通過$_SESSION["passcode"]以及$passcode。檢查你的PHP配置(REGISTER_GLOBALS)

-1

改變變量

$passcode 

的名稱到別的東西?

+3

我寧願更改我的託管服務提供商而不是我的編程風格。 –