如何使用CFHTTPMessageRef设置多个cookie?

时间:2016-10-19 23:08:13

标签: macos cocoa cookies http-headers

在Cocoa中,在CFHTTPMessageCopyAllHeaderFields()上调用CFHTTPMessageRef会返回CFDictionaryRef。这表明标题字段存储在CFDictionaryRef的{​​{1}}中。因此,使用具有相同密钥的CFHTTPMessageRef(“Set-Cookie”)将覆盖该密钥的任何先前值,只留下最后一个(并且使用此方法确实在客户端浏览器中设置了最后一个cookie通过套接字将CFHTTPMessageSetHeaderFieldValue()数据返回给客户端)。有了这个限制,我们如何使用CFHTTPMessageRef设置多个Cookie?

1 个答案:

答案 0 :(得分:0)

由于CFHTTPMessageRef确实将标头存储在可变CFDictionaryRef中,因此使用CFHTTPMessageRef设置多个Cookie确实不是很好的方法。您可以使用逗号分隔符为每个cookie折叠它们,虽然这似乎对我没用。做了什么工作是为Set-Cookie标头放置一个占位符,然后在发送从CFHTTPMessageRef派生的数据之前,将数据转换为字符串并为每个cookie添加单独的Set-Cookie标头(替换占位符)使用CFHTTPMessageSetHeaderFieldValue()。只有当主体有效负载是字符串时才有效。如果是二进制数据(如图像),则需要执行其他步骤以确保维护数据。

显然,这是CFHTTPMessageRef的已知问题,因为它不符合最新的HTTP规范:rdar://15933483