从Zf2控制器中删除cookie

时间:2014-08-05 15:13:36

标签: zend-framework2 zfcuser

我正在尝试从UserController模块的控制器ZfcUser中删除Cookie。

当用户退出时,我想删除所有cookie。

例如,我在视图中设置了Cookie:

setcookie("var", $value);

LogoutAction:

 public function logoutAction()
    {

        $this->zfcUserAuthentication()->getAuthAdapter()->resetAdapters();
        $this->zfcUserAuthentication()->getAuthAdapter()->logoutAdapters();
        $this->zfcUserAuthentication()->getAuthService()->clearIdentity();

        $redirect = $this->params()->fromPost('redirect', $this->params()->fromQuery('redirect', false));

        if ($this->getOptions()->getUseRedirectParameterIfPresent() && $redirect) {


            return $this->redirect()->toUrl($redirect);
        }

        return $this->redirect()->toRoute($this->getOptions()->getLogoutRedirectRoute());
    }

2 个答案:

答案 0 :(得分:4)

如果要删除或使用zend框架2创建cookie,请使用Zend\Http\Header\SetCookie类并将实例注入响应头

创建Cookie

// create a cookie
$cookie = new \Zend\Http\Header\SetCookie(
    'testcookie',
    'testData',
    strtotime('+1 Year', time()), // 1 year lifetime
    '/'
);

$this->getServiceManager()->get('Response')->getHeaders()->addHeader($cookie);

删除Cookie

通过zend删除cookie相同的规则适用于删除php setcookie函数的cookie - 只需将相同的cookie名称放在负lifetime并将其注入响应头 - 只需比如上面创建一个cookie

// cookie löschen
$cookie = new \Zend\Http\Header\SetCookie(
    'testcookie',
    '',
    strtotime('-1 Year', time()), // -1 year lifetime (negative from now)
    '/'
);
$this->getServiceManager()->get('Response')->getHeaders()->addHeader($cookie);

答案 1 :(得分:1)

Zend Framework 2允许在HTTP请求中存储cookie,因此您可以使用Zend\Http\Header\SetCookie类访问标题中的主题。

以下是使用此mecanisme设置和删除Cookie的示例:

$cookie = new SetCookie('name', 'value');
$cookie->setExpires(time() + 365 * 60 * 60 * 24);
$headers= $this->getResponse()->getHeaders();
$headers->addHeader($cookie);

按名称删除Cookie 在删除cookie之前,您可以检查它是否存在于请求中。这是一个简单的代码:

public function logoutAction()
{
 //.....

$cookie= $this->getRequest()->getCookie();
if ($cookie->offsetExists('name')) {
$new_cookie= new SetCookie('name', '');//<---empty value and the same 'name'
$new_cookie->setExpires(-(time() + 365 * 60 * 60 * 24));
$headers->addHeader($new_cookie);

//.....
}

希望这有帮助。