【问题标题】:How to pass some custom cookie parameters in fastcgi如何在 fastcgi 中传递一些自定义 cookie 参数
【发布时间】:2015-06-26 05:55:08
【问题描述】:

我已经用 fcgi 和 C 编写了一个服务器,在我将一些字符串打印到 request.out 之后,我需要添加一些自定义参数。 要清楚这是我的示例代码:

while (1) 
{
    rc = FCGX_Accept_r(&request);
    if (rc < 0)
        break;
    FCGX_FPrintF(request.out,
        "Content-type: text/html\r\n"
        "\r\n");
    //the html page content
    FCGX_FPrintF(request.out,
        "<form method=\"post\" action=\"\">"
        "<input type=\"text\" name=\"num\">"
        "<input type=\"submit\" value=\"click\" name=\"submit\">"
        "</form>"       
        );
    .
    .
    .

    //and somewhere like here I need to add a cookie parameter
    FCGX_FPrintF(request.out,
    "set-cookie:myParam=myValue\r\n"
    "\r\n");
    .
    .
    .
    .
    FCGX_Finish_r(&request);
}

但这最终会直接打印到页面。我怎样才能把它放在缓冲区的开头?

【问题讨论】:

  • 你能不能把它写在Content-Type 之前,让它进入到header blob 中?
  • 在这个服务器中,我解析一个 HTML 页面或一个 CSP 页面,在页面的任何地方都可以调用 Session_start。将一些字符串放入 request.out 流后,如何设置 sessionid。我可以将页面内容放在一个字符串中,然后调用 FCGX_Print(...) 但我正在寻找更好的解决方案。

标签: c fastcgi


【解决方案1】:

HTTP 协议具有以下请求和响应架构:

<header 1>\r\n
<header 2>\r\n
...
<header n>\r\n
\r\n
<body>

因此,您需要发送的任何标头都必须在分隔响应的标头和正文部分的空行之前发送。

在您的情况下,您需要在Content-Type 之前或之后立即编写set-cookie 标头,否则浏览器会将其解释为响应正文的一部分。另外,我建议遵循大小写约定:

FCGX_FPrintF(request.out,
    "Content-type: text/html\r\n"
    "Set-Cookie: myParam=myValue\r\n"
    "\r\n");

【讨论】:

  • n 这个服务器我解析一个 HTML 页面或一个 CSP 页面,在页面的任何地方都可以调用 Session_start。将一些字符串放入 request.out 流后,如何设置 sessionid。我可以将页面内容放在一个字符串中,然后调用 FCGX_Print(...) 但我正在寻找更好的解决方案。
  • 您无法在开始发送正文后发送 sessionid(另一个标题),所以是的,在您的特定情况下,您需要在发送标题之前解析 HTML 页面。您对 HTML 页面的解析流程如何,也许可以改进。
  • 是的,你是对的。如果我想解析包含 HTML、CSS、JS 和 C 代码的 CSP 页面,我该怎么做?
  • 另一种方法是解析页面两次:第一次提取 sessionid 所需的数据,第二次就是现在的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 2021-08-18
  • 2017-02-07
相关资源
最近更新 更多