使用的是MVC框架,在一个控制器的action中设置COOKIE:setCookie('isLogin', 1, 0, '/');
setCookie('nickName', $result[0]['nickname'], 0, '/');
setCookie('integral', $result[0]['integral'], 0, '/');
然后在另一个action中杀出COOKIE:setCookie('isLogin', '', time()-100);
setCookie('nickName', '', time()-100);
setCookie('integral', '', time()-100);
但是COOKIE并没有删除成功~用var_dump($_COOKIE)还是能打印出isLogin等的值,这是为什么啊?
谢谢!
setCookie('nickName', $result[0]['nickname'], 0, '/');
setCookie('integral', $result[0]['integral'], 0, '/');
然后在另一个action中杀出COOKIE:setCookie('isLogin', '', time()-100);
setCookie('nickName', '', time()-100);
setCookie('integral', '', time()-100);
但是COOKIE并没有删除成功~用var_dump($_COOKIE)还是能打印出isLogin等的值,这是为什么啊?
谢谢!
setCookie('isLogin', null);
首先如果你第一次请求一个远程服务器页面,然后如果浏览器发现返回头里有Set-Cookie项(php的setcookie函数做得事情,或者用header函数也可实现),浏览器就知道该保存cookie了,相应参数还有cookie多久过期,服务器文件路径,有效域名等等然后第二次你再请求同样的服务器(根据域名判断),浏览器自己会检测上次这个服务器叫我保存的cookie,我都检查一遍,没有过期的通通放入http请求头(Cookie项)发送到服务器去,这时候服务器才能根据http请求头获取到客户端发送过来的cookie值,然后根据这些值初始化$_COOKIE数组.
我画了张图:
假设现在就是想做一个“登陆”的操作,其中用$_COOKIE['isLogin']来判断是否已经登陆:
在第一次(请求/返回)中:
1、用户点击“登陆”按钮,调用action chkLogin()
2、在这个action中有set('isLogin', 1, 0, '/'); 此时$_COOKIE['isLogin']还不存在
3、服务器返回的头中包含set-cookie,随即浏览器保存Cookie的isLogin。在第二次(请求/返回)中:
1、用户再请求这个域名,这个时候就会带上保存好且可用的COOKIE值
2、服务器这回在初始化$_COOKIE时,就有$_COOKIE['isLogin']了这个流程没错吧?但我现在有个问题。
我在模板页的内容头部分(不是<head>)判断是否有$_COOKIE['isLogin'],如果有就显示“欢迎您XXX”,如果没有就显示“登陆”和“注册”。
(1)如果在action chkLogin()中直接显示这个action的模板页,就还是显示“登陆”和“注册”,也就是符合途中第一次(访问/返回)的情况。
(2)但我如果在action chkLogin()中,跳转到首页,就显示“欢迎您XXX”。我的问题是:
在(2)的情况中,跳转到另一个页面前,当前访问的这个地址会给客户浏览器返回一个值吗?
如果不返回而直接跳转,那不就是符合图中第一次(访问/返回)的情况了吗?为什么就能获取到$_COOKIE['isLogin']呢??谢谢!
关于你的问题,可能是我没说清楚,我所谓的第一次,第二次..其实应该理解成,不管哪一次浏览器请求接收到服务器让浏览器存储cookie的旨意后,余下的n次,只要浏览器有保存相关域名的cookie,那么它在向这个域名某个页面发送请求的时候,都会自动带上未过期的相关cookie,注意这个cookie是可以叠加的,比如第一次浏览器存了某个域名的cookie,然后向同个域名的另一个页面请求,这个页面又通知浏览器再存储另一些cookie信息,然后再次请求就会带上这所有的相关cookie..