cookie值中的逗号在ZF2中被双重解析

时间:2015-08-18 12:01:41

标签: php cookies zend-framework2 setcookie

我正在使用ZF2的Zend\HTTP\Header\SetCookie class来设置命名Cookie。问题是该值是以逗号分隔的单个单词值列表。到目前为止,这一直在正常工作:

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

Cookie值被编码,逗号变为%2C,所有浏览器都很好。稍后检索值并在逗号上拆分就可以了。

问题是cookie没有定义路径值,它默认为运行它的任何文件夹。我只是遇到了中断的情况,我需要强制cookie路径成为站点根目录。我认为这就像添加正确的值一样简单:

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

这似乎设置路径就好了,但现在cookie值搞砸了!只有数组中的 last 项才能通过设置的实际cookie。无论数组中有多少项,它们都会被丢弃,只有最后一项出现在cookie标题中。

知道发生了什么以及如何修复它?这是ZF2中的错误还是我做错了什么?

编辑:是的我尝试使用urlencode()对值进行预编码,然后再将其传递给Cookie函数,但这并未改变最终结果。使用不同的分隔符确实解决了Zend的这个问题,但它在我的程序的其他部分之间创建了不兼容性,包括第三方代码和现有URL,这意味着我必须对cookie进行版本化并更新旧会话 - 我不想要的马戏团加入,如果我能帮助它。

1 个答案:

答案 0 :(得分:-1)

这可能听起来很愚蠢,但只是删除cookie或尝试其他浏览器(不是私人浏览器):)