Nginx只将一个cookie传递给自定义指令

时间:2015-05-11 08:02:11

标签: cookies nginx

我正在使用以下代码输出Cookie的数量,标题和值。

std::stringstream ss;
ss << "'";
ngx_array_t cookies = ctx->initiatingRequest->headers_in.cookies;
ngx_table_elt_t** cookieTable = reinterpret_cast<ngx_table_elt_t**>(cookies.elts);
for (unsigned int i=0; i < cookies.nelts; i++) {
    ss << std::string(reinterpret_cast<char *>(cookieTable[i]->key.data),cookieTable[i]->key.len) << "-" << std::string(reinterpret_cast<char*>(cookieTable[i]->value.data),cookieTable[i]->value.len) << "+";
}
ss << cookies.nelts << "'";

我尝试了很多不同的东西,但“headers_in.cookies”似乎只包含1个cookie,无论设置了多少。 (我也尝试了一般的标题并获得了相同的结果。)nginx或我的代码中是否有一些我可能需要启用或禁用的特殊内容?我在自定义模块中找不到明确消除重复项的任何内容。

编辑: nginx调试日志显示Cookie以分号分隔列表而非多个标头发送。可能就是这样,如果是这样,我该如何改变呢?

我还注意到调试日志不包含ngx_http_parse_multi_header_lines函数中的“parse header:”调试日志行。

1 个答案:

答案 0 :(得分:1)

尽管设置了nginx中的对象,但实际上只有一个包含所有对象的cookie头。由于在一行中有多个cookie的附加分号导致我在用作输出的Set-Cookie标头(上面没有看到)中断,这一事实被混淆了。