2012-03-01 77 views
6

我是zend框架的新手。我已經編寫了這個代碼來在我的網站上設置cookie。在zend框架中設置cookie

public function setCookie($data){ 
    $email_cookie = new Zend_Http_Cookie('user_email_id', $data['user_email_id'], $_SERVER['HTTP_HOST'], '', FALSE); 
    $pass_cookie = new Zend_Http_Cookie('user_password', $data['user_password'], $_SERVER['HTTP_HOST'], '', FALSE); 
    $cookie_jar = new Zend_Http_CookieJar(); 
    $cookie_jar->addCookie($email_cookie); 
    $cookie_jar->addCookie($pass_cookie); 
} 

我甚至不知道通過編寫這段代碼,我的cookie是否設置? 現在如果我想檢索cookie,那我該怎麼做?

回答

16

Zend_Http_Cookie不是設置Cookie。它是Zend_Http_Client用於從需要cookie的站點發送和接收數據的類。設置Cookie只需要使用標準的PHP setcookie()功能:

setcookie('user_email_id', $data['user_email_id'], time() + 3600, '/'); 
setcookie('user_password', $data['user_password'], time() + 3600, '/'); 

這將設置在1小時內到期的cookie。隨後您可以使用$_COOKIE['user_email_id']$_COOKIE['user_password']訪問這些請求;或者您正在使用ZF的MVC類:$this->getRequest()->getCookie('user_email_id')(來自控制器方法)。

+0

'$ this-> getRequest() - > getCookie('user_email_id')'返回一個cookie對象。現在,如何從該cookie對象獲取值? – Stephane 2016-12-01 10:36:43

1

檢查Zend_Http_Cookie

你會得到你的cookie像以下:

echo $email_cookie->getName(); // user_email_id 
echo $email_cookie->getValue(); // Your cookie value 

echo ($email_cookie->isExpired() ? 'Yes' : 'No'); // Check coookie is expired or not 
0

嘗試:

 

$ret_as = COOKIE_STRING_ARRAY; 
Zend_Http_CookieJar->getAllCookies($ret_as); 
//Get all cookies from the jar. $ret_as specifies the return type 
//as described above. If not specified, $ret_type defaults to COOKIE_OBJECT. 
 

編號:Zend Cookies

+0

什麼是$ ret_as? – 2012-03-01 11:10:39

+0

那是返回類型,你可以使用:COOKIE_STRING_ARRAY,COOKIE_STRING_CONCAT。如果沒有指定,則默認爲COOKIE_OBJECT作爲返回類型 – 2012-03-01 11:34:28

1

用這種方式,你可以做到這一點

在你的控制器做代碼

$cookie = new Zend_Http_Cookie('cookiename', 
         'cookievalue', 
         time() + 7200 //expires after 2 hrs 
         ); 
echo $cookie->__toString(); 
echo $cookie->getName(); //cookie name 
echo $cookie->getValue(); //cookie value 
1

您的Cookie發送響應集。您可以修改代碼中的回覆。

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

默認情況下,前端控制器發送響應時,它已經完成分發請求;通常你永遠不需要調用它。 http://framework.zend.com/manual/1.12/en/zend.controller.response.html

+2

+1。不過要注意'setRawHeader($ cookie)',因爲一些http客戶端(例如,Objective-C中的** ASIHTTP **)會重寫在標題發送之前設置的所有cookie。 使用'$ this-> getResponse() - > setHeader($ cookie-> getFieldName(),$ cookie-> getFieldValue());'而不是。 – Stafox 2015-04-02 12:52:05