2014-03-18 73 views
1
<?php 
session_start(); 
$id = 'dd'; 
print_r($_SESSION); 
?> 

當我進入這個頁面時,變量$ _SESSION ['id']被定義爲一個數字。但是在這個頁面上,我定義了變量$ id,然後當我打印$ _SESSION時,它將變量$ _SESSION ['id']更改爲'dd'。這怎麼可能?由變量定義的PHP會話變量

回答

2

這裏只有兩種方式爲您說明代碼工作:

1)你有register_globals的,並且您的會話已經有了一個id參數設置

這意味着你在一箇舊PHP安裝,和/或一個可怕的配置不好。 Register_globals幾乎是PHP歷史上唯一最大的STUPIDITY,它已經從「現代」版本的PHP中倖免於難。

2)您事先創建了一個參考,例如,

$_SESSION['id'] = 'foo'; 
$id =& $_SESSION['id']; // $id now points at the session variable 
echo $id; // prints foo 
$id = 'bar'; // also changes the session value, because of the referencing. 
echo $_SESSION['id']; // prints 'bar', because of the referencing. 
2

您有register globals turned on。這導致$id聲明覆蓋$_SESSION['id'],因爲它們指向相同的地方。

您應該關閉它,因爲它已被棄用,並可能導致像您遇到的問題。