2015-04-19 1 views
0

J'ai écrit un serveur dans fcgi et C et j'ai besoin d'ajouter un paramètre custome après avoir imprimé un peu de chaîne à request.out. soit clair c'est mon exemple de code:Comment passer certains paramètres cookie personnalisés dans fastcgi

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); 
} 

Mais cela finit par imprimer directement à la page. Comment puis-je le mettre au début de la mémoire tampon?

+0

pouvez-vous l'écrire avant le 'Content-Type' pour l'obtenir dans le blob d'en-tête? –

+0

Dans ce serveur, j'analyser une page HTML ou une page CSP qui pourrait être appelée n'importe où dans la page Session_start. comment pourrais-je définir sessionid après avoir mis une chaîne à request.out flux. Je peux mettre le contenu de la page dans une chaîne puis appeler FCGX_Print (...) mais je cherchais une meilleure solution. –

Répondre

1

Le protocole HTTP est le schéma suivant pour les demandes et les réponses:

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

Donc, l'en-tête que vous devez envoyer doivent être envoyées avant la ligne vide qui sépare les en-têtes et section corps de la réponse.

Dans votre cas, vous devez écrire l'en-tête set-cookie avant ou immédiatement après Content-Type, sinon le navigateur l'interprétera comme faisant partie du corps de la réponse. En outre, je recommande de suivre la convention de boîtier:

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

Sur ce serveur, j'analyser une page HTML ou une page CSP qui, dans la page Session_start, pourrait être appelée. comment pourrais-je définir sessionid après avoir mis une chaîne à request.out flux. Je peux mettre le contenu de la page dans une chaîne puis appeler FCGX_Print (...) mais je cherchais une meilleure solution. –

+0

Vous ne pouvez pas envoyer le fichier session (un autre en-tête) après avoir envoyé le corps, alors oui, dans votre cas particulier, vous devez analyser la page HTML avant d'envoyer les en-têtes. Quel est votre flux avec l'analyse de la page HTML, peut-être que l'on peut être amélioré. – Cristik

+0

Oui, vous avez raison.Si je veux analyser la page CSP qui contient du code HTML, CSS, JS et C, comment puis-je faire cela? –