我正在尝试从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());
}
答案 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);
//.....
}
希望这有帮助。