Cookie未被删除

时间:2015-02-05 20:31:26

标签: session cakephp cookies

我已经看到了这个问题的其他问题,但没有解决我的问题:

我正在使用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'));

好的,这是很多代码,让我解释一下:

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

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

效果很好,它重定向到登录页面,并且使用printr结果是我不再设置cookie ...但是,如果我执行F5或关闭浏览器并再次打开页面...饼干还在那里。

任何......提示在这里?

1 个答案:

答案 0 :(得分:0)

我在设置cookie时更具体地解决了这个问题,如下所示:

创建cookie:

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

删除Cookie:

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

我基本上添加了最后两个字段......