2011-05-11 65 views
12

我如何使用Zend_Http_Cookie来设置和读取cookie?如何在Zend中使用cookie?

我特里结构来设置cookie的是这样的:

$cookie = new Zend_Http_Cookie('TestCookie','TestValue','localhost.com'),但不会产生的cookie。还有我如何阅读Zend的cookies?

感谢

+0

[Zend_Http_Cookie](http://framework.zend.com/apidoc/1.10/_Http_Cookie.html#Zend_Http_Cookie)是一个用于客户端代码的类(例如,当编写向另一个服务器发送请求的东西时) - so不,它不会将cookie发送到您的浏览器。 – HorusKol 2012-10-07 06:48:56

回答

20

据我所知是没有出现在Zend框架“setCookie方法”类。简单地用“普通” PHP:

setcookie('cookieName', 'value', 'lifetime', 'path', 'domain'); 

要读取cookie,您可以使用Zend_Controller_Request_Http();为例:

$request = new Zend_Controller_Request_Http(); 
    $myCookie = $request->getCookie('cookieName'); 
1

纵观docs的Cookie和从过去的经验记忆没有办法告诉一个cookie对象与Response一起发送。

我建议只使用setcookie()

4

对于Zend 1.12,一种设置响应对象的cookie的方法。

下面包含手册中部分的链接。我还附上他们的例子,以防万一页面消失。

http://framework.zend.com/manual/1.12/en/zend.controller.response.html#zend.controller.response.headers.setcookie

$this->getResponse()->setRawHeader(new Zend_Http_Header_SetCookie(
    'foo', 'bar', NULL, '/', 'example.com', false, true 
)); 

$cookie = new Zend_Http_Header_SetCookie(); 
$cookie->setName('foo') 
     ->setValue('bar') 
     ->setDomain('example.com') 
      ->setPath('/') 
     ->setHttponly(true); 
$this->getResponse()->setRawHeader($cookie); 

使用Zend的对象和类,以便创建测试时,你就不会遇到问题,这是很重要的;)

+2

我以这种方式使用了这种方法很久,但我发现这样不可能发送多个cookie。由于Zend_Controller_Response_Abstract-> sendHeaders()中的header()调用的$ replace参数永远不会设置为false,并且默认值为true,所以只有最后一个Set-Cookie Raw-Header会被发送到客户端。不要对多个Cookie使用此方法! – Karsten 2014-03-07 08:18:28

+2

这对于ZF 1.12.x来说很好: $ this-> getResponse() - > setHeader('Set-Cookie',$ cookie-> getFieldValue(),false); – Karsten 2014-03-07 08:33:18

+0

对于Zend建议的设置多个cookie的方法,请参阅下面的我的回复。 – 2015-08-18 09:29:07

2

从Zend的github上issue关于多个Cookie:

$setCookieHeader = new Zend_Http_Header_SetCookie('othername1', 'othervalue1'); 
$appendCookie = new Zend_Http_Header_SetCookie('othername2', 'othervalue2'); 
$headerLine = $setCookieHeader->toStringMultipleHeaders(array($appendCookie)); 

$this->getResponse()->setRawHeader($headerLine);