使用的是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等的值,这是为什么啊?
谢谢!

解决方案 »

  1.   

    删除那页setCookie不能有任何输出,time()-100改为time()-1800试一下
      

  2.   

    是不是用的ThinkPHP直接给个空值
    setCookie('isLogin', null);
      

  3.   

    cookie的原理你明白吧?
    首先如果你第一次请求一个远程服务器页面,然后如果浏览器发现返回头里有Set-Cookie项(php的setcookie函数做得事情,或者用header函数也可实现),浏览器就知道该保存cookie了,相应参数还有cookie多久过期,服务器文件路径,有效域名等等然后第二次你再请求同样的服务器(根据域名判断),浏览器自己会检测上次这个服务器叫我保存的cookie,我都检查一遍,没有过期的通通放入http请求头(Cookie项)发送到服务器去,这时候服务器才能根据http请求头获取到客户端发送过来的cookie值,然后根据这些值初始化$_COOKIE数组.
      

  4.   

    谢谢你的回答!我明白你说的意思了!但我不知道我理解的对不对~
    我画了张图:
    假设现在就是想做一个“登陆”的操作,其中用$_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']呢??谢谢!
      

  5.   

    你理解的非常正确!呵呵
    关于你的问题,可能是我没说清楚,我所谓的第一次,第二次..其实应该理解成,不管哪一次浏览器请求接收到服务器让浏览器存储cookie的旨意后,余下的n次,只要浏览器有保存相关域名的cookie,那么它在向这个域名某个页面发送请求的时候,都会自动带上未过期的相关cookie,注意这个cookie是可以叠加的,比如第一次浏览器存了某个域名的cookie,然后向同个域名的另一个页面请求,这个页面又通知浏览器再存储另一些cookie信息,然后再次请求就会带上这所有的相关cookie..