日期:2014-05-17  浏览次数:20408 次

PHP session 的奇怪规则

session_start();
var_dump($_SESSION);
$name = 'laruence';
$_SESSION['name'] = null;

输出: array(1) { ["name"]=> string(8) "laruence" }

$name 和 $_SESSION['name']是八竿子打不着的两个变量, 它凭什么给弄成等同于同一个变量, 发明PHP那人脑残吧. 

------解决方案--------------------
引用:
引用:PHP code?12345<?phpsession_start();var_dump($_SESSION);$name = 'angryfrog';$_SESSION['name'] = null;


输出:
array(1) { ["name"]=> NULL }


是你自己把register_glob……


是我错了,这个问题与register_global无关。不过我的5.4版本就没有这个问题,5.4也已经没有register_global这个选项了。你这代码貌似引用自laruence的博客:http://www.laruence.com/2009/07/13/976.html

他在里面已经解释了原因。在session.bug_compat_42开启的情况下, PHP会认为变量name是$_SESSION['name']的一个引用, 在session_close的时候, 会把变量a的值回写。