BOGUE : Set-cookie est ignorée dans CGI lorsque combinée avec emplacement

Traductions disponibles Traductions disponibles
Numéro d'article: 176113 - Voir les produits auxquels s'applique cet article
Nous vous recommandons de tous les utilisateurs d'effectuer la mise à niveau à Microsoft Internet Information Services (IIS) version 7.0 s'exécutant sur Microsoft Windows Server 2008. IIS 7.0 augmente considérablement la sécurité de l'infrastructure Web. Pour plus d'informations sur les questions liées à la sécurité IIS, reportez-vous au site Web de Microsoft à l'adresse suivante :
http://www.microsoft.com/technet/security/prodtech/IIS.mspx
Pour plus d'informations sur IIS 7.0, reportez-vous au site Web de Microsoft à l'adresse suivante :
http://www.iis.net/default.aspx?tabid=1
Agrandir tout | Réduire tout

Sommaire

Symptômes

Lorsqu'une application CGI envoie un en-tête Set-Cookie avec réponse «302 déplacé Object» et en-tête Location, Internet Information Server (IIS) ignore l'en-tête de cookie.

Résolution

Ce comportement est une violation de la spécification CGI, les États, "les en-têtes ne sont pas des directives de serveur sont envoyés directement au client. Actuellement, cette spécification définit trois directives serveur..."

Pour résoudre ce problème, assurez-vous que le nom de fichier de l'EXE commence par «nph-» et créer manuellement tous les en-têtes HTTP dans votre programme. «nph-» indique au serveur que le programme CGI doit être exécuté en mode en-têtes non analysée. CGI comporte deux modes. En mode normal (analysées en-têtes), vous devez envoyer à une des directives CGI vers une sortie standard (type de contenu, emplacement ou état). CGI met en forme une ligne de réponse HTTP valide en fonction de la directive que vous avez envoyé. Pour vous mettre en forme d'autres en-têtes HTTP standard et il doit inclure les en-têtes que vous avez spécifié.

L'autre mode concerne le mode en-tête non analysée. Dans ce mode CGI ne définit pas les en-têtes lui-même. Le programme CGI doit formater une réponse HTTP complet, y compris la ligne de réponse et tous les en-têtes. Le serveur ne pas ajouter ou modifier des en-têtes pour vous dans ce mode.

La convention est qu'un programme CGI dont le nom commence par «nph-» est exécuté en mode en-tête non analysée ; dans le cas contraire, programmes CGI sont exécutés en mode en-tête analysée.

Statut

Microsoft a confirmé l'existence de ce bogue dans les produits Microsoft répertoriés au début de cet article.

Plus d'informations

Procédure pour reproduire le problème

Compiler ce programme CGI en tant qu'une application Console Win32 et placez-le dans un dossier sur votre serveur IIS où elle peut être exécutée :
#include <stdio.h>
int main()
{
  printf("Location: %s\r\n", "http://www.yahoo.com");
  printf("Set-Cookie: Name1=Value1; path=/;
    expires=Fri, 22 May 1998 21:00:00 GMT\r\n\r\n");
  return 0;
}
				

Appeler le programme CGI à partir de votre navigateur et observez sa sortie (via le Moniteur réseau, par exemple). Il sera semblable à ceci :
HTTP/1.0 302 Object moved
Location: http://www.yahoo.com
Server: Microsoft-IIS/2.0
Content-Type: text/html
Content-Length: 145

<head><title>Document moved</title></head>
<body><h1>Object Moved</h1>This document may be found
<a HREF="http://www.yahoo.com">here</a></body>
				

Notez que l'en-tête Set-cookie n'a pas été envoyé par IIS. Si vous disposez des avertissements de cookie activées dans votre navigateur, aucun avertissement ne s'affiche.

Pour autoriser un cookie à fixer dans une réponse 302, utilisez un code similaire à suivantes et préfixe «nph-» au nom du fichier exécutable :
#include <stdio.h>
int main()
{
  printf("HTTP/1.0 302 Redirect\r\n");
  printf("Location: %s\r\n", "http://www.yahoo.com");
  printf("Set-Cookie: Name=Value; path=/; expires=Fri, 22 May 1998 21:00:00
   GMT\r\n\r\n");
  return 0;
}
				

La sortie est semblable à celui-ci. Notez que le cookie est maintenant envoyé et pas d'en-tête sont ajoutées par le serveur.
HTTP/1.0 302 Redirect
Location: http://www.yahoo.com
Set-Cookie: Name=Value; path=/; expires=Fri, 22 May 1998 21:00:00 GMT
				

Références

(c) 1997 Microsoft Corporation, tous droits réservés. Contribution Leon Braginski, Microsoft Corporation

Propriétés

Numéro d'article: 176113 - Dernière mise à jour: jeudi 3 juillet 2008 - Version: 5.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Internet Information Server 3.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
Mots-clés : 
kbmt kbbug kbnofix KB176113 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 176113
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com