我已经看到了这个问题的其他问题,但没有解决我的问题:
我正在使用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,然后它会检测该会话变量并删除cookie。
效果很好,它重定向到登录页面,并且使用printr结果是我不再设置cookie ...但是,如果我执行F5或关闭浏览器并再次打开页面...饼干还在那里。
任何......提示在这里?
答案 0 :(得分:0)
我在设置cookie时更具体地解决了这个问题,如下所示:
创建cookie:
setcookie('user','pass',time()+(3600*30*24), '/', $_SERVER['SERVER_NAME']);
删除Cookie:
setcookie('user','',1, '/', $_SERVER['SERVER_NAME']);
我基本上添加了最后两个字段......