2011-05-11 26 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);