2015-08-18 2 views
4

Я использую ZF2's Zend\HTTP\Header\SetCookie class, чтобы установить именованный файл cookie. Ловушка заключается в том, что значение представляет собой список значений одного слова, разделенных запятыми. Это работает нормально на сегодняшний день, как это:Запятые значения cookie, которые были дважды проанализированы в ZF2

$translations_cookie = new SetCookie('translations', implode(',', $requested_translations), null, null, null, false, false, null, null); 
$response->getHeaders()->addHeader($translations_cookie); 

Значение печенья будет закодирован и запятые становятся %2C и все хорошо во всех браузерах. Возврат значения позже и расщепление на запятые работает просто отлично.

Проблема в том, что cookie не имеет определенного значения пути и по умолчанию используется любая папка, из которой он был запущен. Я просто столкнулся с ситуацией, когда это ломается, и мне нужно заставить путь к файлу cookie быть корнем сайта. Я думал, что это будет так же просто, как добавить правильное значение:

$translations_cookie = new SetCookie('translations', implode(',', $requested_translations), null, '/', null, false, false, null, null); 
$response->getHeaders()->addHeader($translations_cookie); 

Это, кажется, установить путь просто отлично, но теперь значение куки перепутались! Только элемент последнего в массиве передает его фактическому файлу cookie, который устанавливается. Независимо от того, сколько элементов находится в массиве, они отбрасываются, и только последний элемент встречается в заголовке файла cookie.

Любая идея, что случилось и как я ее исправим? Это ошибка в ZF2, или я делаю что-то неправильно?

Edit: Да я пытался предварительно кодирующая значение, используя urlencode() перед передачей его в функцию печенья, но это не изменило конечный результат. Использование другого разделителя устраняет эту проблему с помощью Zend, но создает несовместимость между другими частями моей программы, включая сторонний код и существующие URL-адреса, и будет означать, что я должен обновить файлы cookie и обновить старые сеансы - цирк, который я не хочу присоединяйтесь, если я могу помочь.

+0

Вы, наверное, сделал это уже, но я просто установить вар как $ cookieVal взрывать («» , $ requested_translations), var_dump it и подтвердите, что это все равно, что вы считаете правильным, прежде чем устанавливать cookie. – AlexMA

+0

@AlexMA Да, я уже это подтвердил. – Caleb

+0

Какова ценность '$ translations_cookie-> getValue()'? Кроме того, какая версия ZF2 это? Я просмотрел исходный код zf2-master для класса SetCookie и класса Headers, и ничего не выдалось, но, возможно, есть ошибка в более старой версии. – AlexMA

ответ

-1

Это может показаться глупыми, но просто удалить куки или попробовать другой браузер (не частный браузер) :)

Смежные вопросы