错误: 设置 Cookie 忽略 CGI 时组合带位置中

文章翻译 文章翻译
文章编号: 176113 - 查看本文应用于的产品
我们强烈建议所有用户都升级到 IIS 7.0 版 Microsoft Internet Information Services Microsoft Windows Server 2008 上运行。 IIS 7.0 大大提高了 Web 基础结构安全。有关 IIS 的详细信息与安全相关的主题,请访问下面的 Microsoft 网站:
http://www.microsoft.com/technet/security/prodtech/IIS.mspx
有关 IIS 7.0 的详细信息,请访问下面的 Microsoft 网站:
http://www.iis.net/default.aspx?tabid=1
展开全部 | 关闭全部

本文内容

症状

具有"302 对象移"响应标头设置 Cookie 和位置标头,将发送 CGI 应用程序,Internet 信息服务器 (IIS) 将忽略 cookie 标头。

解决方案

此行为是违反了哪些状态"不是服务器指令的任何标头发送直接返回给客户端该 CGI 规范当前,此规范中定义了三个服务器指令..."

作为一种解决办法确保该 exe 文件的文件名称开头"从而-",并在 $ 程序中手动创建所有的 HTTP 标头。"从而-"指示服务器 CGI 程序是在不分析页眉模式中运行。CGI 有两种模式。在正常模式下 (已分析的标头),则必须将一个 CGI 指令发送到标准输出 (内容类型、 位置,或状态)。CGI 设置格式,根据您发送该指令的有效 HTTP 响应行。它为您,设置格式,其他标准的 HTTP 标头,它应包括您指定的任何其他标头。

其他模式是不分析页眉模式。在这种模式下 CGI 不设置任何标头本身。CGI 程序必须设置包括响应行和所有标头的完整的 HTTP 响应的格式。服务器不会添加或修改为您在此模式下的任何标头。

存在如下约定,则名称以"从而-"开头的 CGI 程序在非分析头模式下运行 ; 否则,在分析的头模式下运行 CGI 程序。

状态

Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中的错误。

更多信息

重现行为的步骤

编译为 Win32 控制台应用程序的此 CGI 程序并将其放置在您的 IIS 服务器上的一个文件夹,才能执行它:
#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;
}
				

从您的浏览器中调用 CGI 程序并观察它的输出 (通过网络监视器,例如)。它将与以下内容类似:
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>
				

请注意,iis 设置 Cookie 标题未被发送。如果您在您的浏览器中打开的 cookie 警告会不出现任何警告。

若要以便在 302 响应中设置的 cookie 使用类似于以下和可执行文件的名称的前缀"从而-"的代码:
#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;
}
				

输出是类似于以下内容。请注意立即发送 cookie,时,没有标题添加的服务器。
HTTP/1.0 302 Redirect
Location: http://www.yahoo.com
Set-Cookie: Name=Value; path=/; expires=Fri, 22 May 1998 21:00:00 GMT
				

参考

(c) Microsoft Corporation 1997 年,保留的所有权限。由 Leon Braginski,Microsoft 公司的贡献

属性

文章编号: 176113 - 最后修改: 2008年7月3日 - 修订: 5.0
这篇文章中的信息适用于:
  • Microsoft Internet Information Server 3.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
关键字:?
kbmt kbbug kbnofix KB176113 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 176113
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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