2014-01-29 35 views
0

我有一個很奇怪的問題。這裏是我的腳本:使用PHP會話的瘋狂事情(會話變量在未請求時由refrence分配)

<?php 
session_start(); 

$_SESSION['test'] = '123'; 
var_dump($_SESSION); 
echo "<br />\n"; 

$test = $_SESSION['test']; 
var_dump($test); 
echo "<br />\n"; 

$_SESSION['test'] = '1234'; 
var_dump($test); 

我在5.3.5運行此腳本,並得到以下的輸出:

array(1) { ["test"]=> &string(3) "123" } 
string(3) "123" 
string(4) "1234" 

注意,「測試」會話變量存儲爲參考,以「123」字符串["test"]=> &string(3) "123"。 ???這是爲什麼?

然後爲會話變量分配一個新值,$test也被更改。所以$test變量的行爲就像是對$_SESSION['test']的引用。我根本沒有要求這個。

當在PHP 5.5.1上運行相同的腳本時,一切正常。我的PHP安裝是否被破壞?任何人都有線索?

+0

可能的重複[在PHP中,爲什麼我的會話變量作爲引用持久?](http://stackoverflow.com/questions/4765483/in-php-why-are-my-session-variables-persisted-as -references) –

+1

不通過參考轉讓給我:http://codepad.viper-7.com/l7TBnR –

回答

0

您需要在php.ini中禁用全局註冊表。更改爲:

register_globals = Off 

在5.5是否能夠正常工作,因爲使用登記,因爲PHP 5.4.0刪除全局的功能。口譯員忽略你的register_globals = On。請在示例#2中查看更多關於此行爲的信息http://php.net/manual/en/security.globals.php

+0

你是100%正確的!我有register_globals =在 花了我時間找到它在哪裏打開。 php.ini關閉了。它是打開它的.htaccess文件之一。 謝謝! –