标签:
上述代码会产生怎么样的结果?
a.php: //报错
这个页面的值不难,将会报出一个notice( Undefined index: a)错误,因为cookie的返回值具有慢一拍特性,在页面中设置setcookie后,当用户访问时,需要把cookie键值对包含在http响应头返回给客户端,当你下次访问的时候,浏览器会着这份具有cookie值的请求头请求服务器,服务器也就知道当前的客户端存在这一份cookie值,然后再用到其他业务逻辑.
b.php: //abc
这个页面的值是abc,其实第一次看到这个答案我也很惊讶.
其实原理是这样的:
我们一直对cookie/session,$_COOKIE/$_SESSION混为一谈了,其实呢,这四个(两组)是独立开来的,cookie/session是属于http里的值,$_COOKIE/$_SESSION是属于php里面的全局变量.我们在setcookie的时候,实际上给http中的cookie赋值,而http中的cookie与php中的超全局变量$_COOKIE关联上.所以$_COOKIE才有这个值abc,并不是直接赋值到$_COOKIE超全局变量上的.所以同样道理,unset($_COOKIE)销毁的是$_COOKIE这个变量,与http头中的cookie值无关,所以在b.php依旧可以打印出来.
解决办法就是 setcookie(a,‘‘,-1)将这个cookie设置为过期,那么b.php就不能再获取到了.
-----------------------------------分割线-----------------------------------------
同样的道理可以用到session机制里,
在这幅图里,最终还是能够打印出$_SESSION的值,因为session_destroy将http中的session和超全局变量$_SESSION的关系分离了,详见手册
session_destroy 是把session和$_SESSION之间的关系割开了,如果你想重新恢复session函数功能,你就要重新打开session_start();例如下图,
这样子session值就会被顺利删掉,那么与它关联的$_SESSION超全局变量值也就消失了
总结:
欢迎转载,但一定要保存原址+作者
作者:PHP程序痴-妖都小陈
原文地址:http://www.cnblogs.com/gzchenjiajun-php/p/5036462.html
<原创>一串简单的代码牵扯出的session,cookie,$_session,$_cookie之间关系问题
标签:
原文地址:http://www.cnblogs.com/gzchenjiajun-php/p/5036462.html