0

我在页面中有以下内容,例如/mypage?myvar=oldvalue

$_SESSION['myvar'] = $_GET['myvar'];
$myvar = 'a_new_string'

现在$_SESSION['myvar']有价值'a_new_string'

这是设计使然吗?

我怎样才能复制它的'myvar'不是引用它?

4

5 回答 5

2

这是一个功能而不是错误:-)

幸运的是你可以关闭它,在你的 php.ini 中设置register_globals = off

于 2008-11-19T12:44:17.000 回答
2

register_globals 是魔鬼的发明。幸运的是,在 PHP 6.0 中它将被完全禁用。这不仅仅是一个巨大的安全问题,它让人们感到困惑。请在您的 php.ini 中使用 register_globals = Off 将其关闭 更多信息:http : //us2.php.net/register_globals 您也可以使用命令 if (ini_get(register_globals)) echo "turn it off! :)';

于 2008-11-19T14:24:29.840 回答
1

我已经在 register_globals 打开和关闭的情况下对此进行了测试,但无法重现它。您使用的是什么版本的 PHP(我在 5.2.6 上)。

于 2008-11-19T12:45:39.603 回答
0

运行后:

<?php
session_start(); 
$_GET['myvar'] = ''; 
$_SESSION['myvar'] = $_GET['myvar']; 
$myvar = 'a_new_string'; 
var_dump($_SESSION); 
?>

在 PHP 5.2.6 我得到这个:

array(1) { ["myvar"]=>  string(0) "" }
于 2008-11-19T12:45:58.887 回答
0

$_Get['myvar'] 是一个数组项 $myvar 是一个变量。这两者之间没有关系

($_GET 是一个超全局数组)

考虑下面的例子

$myarry=array('myvar'=>'myvalue');- 这里 myvar 是数组变量中的一项 $myarray $myvar='';- 这里 myvar 本身就是一个变量。

于 2011-03-21T05:48:33.700 回答