#php #zend-framework
#php #zend-framework
Вопрос:
Как я использую Zend_Http_Cookie для установки и чтения cookies?
Я пытаюсь установить cookie следующим образом:
$cookie = new Zend_Http_Cookie('TestCookie','TestValue','localhost.com')
но файл cookie не генерируется. Также, как я читаю cookies с помощью Zend?
Спасибо
Комментарии:
1. Zend_Http_Cookie — это класс, используемый для клиентского кода (т. Е. При написании чего-либо, что отправляет запрос на другой сервер) — так что нет, он не отправит cookie в ваш браузер.
Ответ №1:
Насколько я знаю, в Zend Framework нет класса «setCookie». Просто используйте «обычный» php:
setcookie('cookieName', 'value', 'lifetime', 'path', 'domain');
Чтобы прочитать файл cookie, вы можете использовать Zend_Controller_Request_Http();
в качестве примера:
$request = new Zend_Controller_Request_Http();
$myCookie = $request->getCookie('cookieName');
Ответ №2:
Для Zend 1.12 есть способ установить cookies для объекта response.
Ссылка на часть руководства приведена ниже. Я также прикрепил их примеры на случай, если страница когда-нибудь исчезнет.
$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, чтобы вы не сталкивались с проблемами при создании тестов 😉
Комментарии:
1. Я использовал этот метод целую вечность, поскольку казалось, что это правильный способ, но я только что узнал, что таким образом невозможно отправить несколько cookies. Клиенту будет отправлен только последний необработанный заголовок Set-Cookie, поскольку параметру $replace вызова header() внутри Zend_Controller_Response_Abstract->sendHeaders() никогда не присваивается значение false с значением по умолчанию true. Не используйте этот метод с несколькими cookies!
2. Это хорошо выглядит для ZF 1.12.x: $this-> GetResponse()->setHeader(‘Set-Cookie’, $cookie->GetFieldValue(), false);
3. Рекомендуемый Zend способ установки нескольких cookies смотрите в моем ответе ниже.
Ответ №3:
Из проблемы с Zend на github по поводу нескольких файлов 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);