2015-02-05 131 views
0

我已经看到了这个问题的其他问题,但没有解决我的问题:cookie不会被删除

我使用CakePHP,代码设置/取消设置的cookie是在AppController中 - > beforeFilter()来确保它正常工作(将是实际的页面之前要执行的代码的第一部分)

让我们来看看......为登录:

   if($data['check'] == 'on') 
        $_SESSION['cookieActivation'] = 0; 

       $this->redirect(array('controller' => 'info', 'action' => 'index')); 

对于beforeFilter()

session_start(); 

     //Esto es para eliminar la cookie, si la hay, y también sacar la sesión (deslogear) 
     if (isset($_SESSION['cookieRemoval'])) 
     { 
      if (isset($_COOKIE['user'])) //está la cookie, en primer lugar? 
      { 
       unset($_COOKIE['user']); 
       setcookie('user','',1); 
      } 

      unset($_SESSION['cookieRemoval']); 
     } 


     //esto se setea si el tipo puso recordar contraseña en el login de dreyfus, se hace acá porque 
     //es el lugar correcto para setear la cookie, si se intenta hacer después, no funciona 

     if(isset($_SESSION['cookieActivation'])) 
      if($_SESSION['cookieActivation'] == 0) //cero significa que quiere setear cookie porque todavía no lo hizo... 
       { 
        //si quiere que recuerden su login, hacemos una cookie 
        //va a expirar en 30 días... 3600 es una hora.... 
        $_SESSION['cookieActivation'] = 1; 
        setcookie('user','pass',time()+(3600*30*24)); 
       } 

用于注销

$_SESSION['cookieRemoval'] = 1; //avisa a appcontroller que quiere borrar la cookie de sesión... 
      $this->redirect(array('controller' => 'info', 'action' => 'login')); 

好吧,这是一个很大的代码,让我解释一下这一点:

如果你登录,设置会话变量声明,你要设置一个曲奇饼。 然后进入beforefilter,它检查你是否真的想要设置一个cookie,并且它将它设置为30天。

当您进行注销时,会创建一个会话变量来指定您想要删除该cookie,然后它会转到beforefilter,然后它会检测该会话变量并删除该cookie。

它运行良好,它重定向到一个登录页面,并与printr的结果是,我不再有cookie设置...但是,如果我做F5或关闭浏览器并再次打开页面......该cookie仍然存在。

任何...小费在这里?

创建的cookie:

回答

0

我通过设置如果cookie,这样是额外的特定解决了这个问题

setcookie('user','pass',time()+(3600*30*24), '/', $_SERVER['SERVER_NAME']); 

删除Cookie:

setcookie('user','',1, '/', $_SERVER['SERVER_NAME']); 

我基本上都添加了最后两领域...