Я использую 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 и обновить старые сеансы - цирк, который я не хочу присоединяйтесь, если я могу помочь.
Вы, наверное, сделал это уже, но я просто установить вар как $ cookieVal взрывать («» , $ requested_translations), var_dump it и подтвердите, что это все равно, что вы считаете правильным, прежде чем устанавливать cookie. – AlexMA
@AlexMA Да, я уже это подтвердил. – Caleb
Какова ценность '$ translations_cookie-> getValue()'? Кроме того, какая версия ZF2 это? Я просмотрел исходный код zf2-master для класса SetCookie и класса Headers, и ничего не выдалось, но, возможно, есть ошибка в более старой версии. – AlexMA