Как использовать cookies в Zend?

#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.

Ссылка на часть руководства приведена ниже. Я также прикрепил их примеры на случай, если страница когда-нибудь исчезнет.

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, чтобы вы не сталкивались с проблемами при создании тестов 😉

Комментарии:

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);
  

Ответ №4:

Просматривая документы для cookie и помня из прошлого опыта, что нет способа сообщить объекту cookie, который будет отправлен вместе с ответом.

Я предлагаю просто использовать setcookie() .