我有这个小PHP脚本:
<?php
session_start();
$var = array();
$var['key'] = 'Var -> Key';
if ($_GET['set']) {
$_SESSION = array();
$_SESSION['var'] = 'Session -> Var';
}
print_r($_SESSION);
?>
我希望它能返回这个,因为set = 0和set = 1:
Array
(
[var] => Session -> Var
)
然而,它返回set = 0(当然set = 1之后):
Array
(
[var] => Array
(
[key] => Var -> Key
)
)
在这里看看你的身份: http://dev.gruppenunterkuenfte.de/index_test.php?set=1
接下来发生的是$ _SESSION ['var']被$ var取代。 但只有在下一页加载后才能使用。
知道为什么吗?
我可以在我的托管服务商管理界面中切换我的PHP版本,我尝试了5.2.11,5.3.2和4.4.8。
这是我可以在PHP中更改的设置,因此它不会覆盖会话变量吗? 因为我在另一台服务器上没有此问题。
如果定义了$ _SESSION ['var'],那么在$ _SESSION ['var']中,有些设置可以让PHP写$ var。
答案 0 :(得分:3)
关闭register_globals
选项
答案 1 :(得分:1)
register_globals
即可
答案 2 :(得分:1)
$_SESSION['var'] = 'x';
这将创建基础$ var ='x';
,由于在您的php.ini或php服务器设置中RegisterGlobals为ON,因此其他php页面和函数也可以看到$ var。
如果您设置$ var ='y';然后$ _SESSION ['var']立即变为'y'
PHP directive register_globals went from ON to OFF in PHP » 4.2.0.
This feature has been DEPRECATED as of PHP 5.3.0
and register_globals has been REMOVED as of PHP 5.4.0
解决方案: 将$ var和$ _SESSION ['var']的名称分开,例如:
$myvar = array(); //not $var = array();
_SESSION['var'] = anyobject;
这样,无论php主机服务器设置了什么设置,您的代码都是兼容的。