PHP session 的奇怪规则 session_start(); var_dump($_SESSION); $name = 'laruence'; $_SESSION['name'] = null;输出: array(1) { ["name"]=> string(8) "laruence" }$name 和 $_SESSION['name']是八竿子打不着的两个变量, 它凭什么给弄成等同于同一个变量, 发明PHP那人脑残吧. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 或者这是一个bug? var_dump($_SESSION); 这一句如果写写在下面:session_start();$name = 'laruence';$_SESSION['name'] = null;var_dump($_SESSION);则 输出为: array(1){ ['name']=>null }; 但是其他页面的输出应该仍然是"laruence'. 也就是说, 离开此页面的时候, $_SESSION['name']才会被设置为$name的值. 我怎么觉得是你们搞错了啊!输出: array(1) { ["name"]=> string(8) "laruence" }这个是不可能的,你的这个var_dump($_SESSION);明明在$name = 'laruence';之前,应该是你在测试或者什么的时候已经给$_SESSION['name']赋值了,你如果要测试$_SESSION,要注意清空的清空下测试,或者重新打开浏览器,不然会被保存的默认浏览器关闭的! <?phpsession_start();var_dump($_SESSION);$name = 'angryfrog';$_SESSION['name'] = null;输出:array(1) { ["name"]=> NULL }是你自己把register_global打开造成的。 我要能控制就好了, 但是即使是register_global打开, 这个规则还是非常奇怪. 我不知道你是否真的清楚.首先session_start();var_dump($_SESSION);$name = 'angryfrog';$_SESSION['name'] = null;这3句, 后两句的顺序无关, 然后, 如果你在后面echo $_SESSION['name']的值 它仍然是null, 只有此页面离开之后, 任何页面访问 $_SESSION['name'] 都是$name的值了. 还有, 这种效果只有, 设为null的时候出现, 其它时候并不会出现, 包括unset($_SESSION['name']), 这样 就真把$_SESSION['name']置空了. 不管怎么说, 这规则奇葩到家了, 我不知道即使是这里的人有多少人知道具体的规则, 我知道的就是这些, 而且解释不通.如果这规则不奇葩, 它干嘛给警告? 是我错了,这个问题与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的值回写。 在session.bug_compat_42开启的情况下, PHP会认为变量name是$_SESSION['name']的一个引用, 在session_close的时候, 会把变量a的值回写。===============================================你看我的六楼, 事实并非如此, 你说的这个我也知道, 英文警告大体也是这个意思. 但是这里的回写是什么意思? 这种有什么用? $name是$_SESSION['name']的引用, 你去测试, 并非如此.如果$_SESSION里有这个变量, $同名变量就是Session的引用, 就这规则也够呛, 为了那点方便, 太危险了. 这也是PHP后续版本关闭它的原因吧, 也是我说他这规则脑残的原因. 简单的说, 就是bug, 在页面离开的时候, 也就是所谓的SESSION close的时候, 把同名变量的值写到这个SESSION里. 页面都结束了, 还写它干什么? 如果真是引用, 应该任何时候, SESSION都被改写了, 也不用等到结束的时候. 请教EAN13条码号怎么生成?懂的师傅进来教一下。 PD反工程MYSQL数据库,各表字段重复? 可恶的单线程的php socket!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 求验证文本框的JS脚本 foreach问题, php安装不了了!郁闷!!帮忙 w\我有回来了 redhat7.2 下,还是php+apache配置问题,我实在是有点晕。 PHP留言板 首页登录后怎么在首页显示用户名以及不显示登录框? 判断内容里有没有中文,然后要返回中文字符 请教一个解决方案
$name = 'laruence';
$_SESSION['name'] = null;
var_dump($_SESSION);则 输出为: array(1){ ['name']=>null }; 但是其他页面的输出应该仍然是"laruence'. 也就是说, 离开此页面的时候, $_SESSION['name']才会被设置为$name的值.
session_start();
var_dump($_SESSION);
$name = 'angryfrog';
$_SESSION['name'] = null;
输出:
array(1) { ["name"]=> NULL }
是你自己把register_global打开造成的。
session_start();
var_dump($_SESSION);
$name = 'angryfrog';
$_SESSION['name'] = null;
这3句, 后两句的顺序无关, 然后, 如果你在后面echo $_SESSION['name']的值 它仍然是null, 只有此页面离开之后, 任何页面访问 $_SESSION['name'] 都是$name的值了. 还有, 这种效果只有, 设为null的时候出现, 其它时候并不会出现, 包括unset($_SESSION['name']), 这样 就真把$_SESSION['name']置空了. 不管怎么说, 这规则奇葩到家了, 我不知道即使是这里的人有多少人知道具体的规则, 我知道的就是这些, 而且解释不通.如果这规则不奇葩, 它干嘛给警告?
是我错了,这个问题与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的值回写。
===============================================
你看我的六楼, 事实并非如此, 你说的这个我也知道, 英文警告大体也是这个意思. 但是这里的回写是什么意思? 这种有什么用? $name是$_SESSION['name']的引用, 你去测试, 并非如此.如果$_SESSION里有这个变量, $同名变量就是Session的引用, 就这规则也够呛, 为了那点方便, 太危险了. 这也是PHP后续版本关闭它的原因吧, 也是我说他这规则脑残的原因.