HTTP Cookie

HTTP Cookie 为服务器提供了一种机制,用于在客户端应用程序的系统上存储和检索状态信息。 此机制允许基于 Web 的应用程序存储有关所选项目、用户首选项、注册信息的信息,以及以后可以检索的其他信息。

有两个标头(Set-Cookie和 Cookie)与 Cookie 相关。 Set-Cookie标头由服务器发送,以响应 HTTP 请求,该请求用于在用户的系统上创建 Cookie。 如果存在具有匹配域和路径的 Cookie,则客户端应用程序将包含一个发送到服务器的 HTTP 请求。

Set-Cookie响应标头使用以下格式:

Set-Cookie: <name>=<value>[; <name>=<value>]...
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; httponly]

Set-Cookie响应标头中必须包含一个或多个字符串序列, (以分号分隔) 模式 名称= 。 服务器可以使用这些字符串序列在客户端的系统上存储数据。

过期日期是使用 expires=date 格式设置的,其中 date 是格林威治标准时间 (GMT) 的到期日期。 如果未设置过期日期,Cookie 将在 Internet 会话结束后过期。 否则,Cookie 将保留在缓存中,直到过期日期。 日期必须使用以下格式:

DAYDD-MMM-YYYYYHHMMSS GMT

一天

一周中的一天 (太阳、周一、周二、周三、周四、周五、周六) 。

Dd

月份中的日期 (,例如 01,表示) 月的第一天。

月份的三个字母缩写 (1 月、2 月、3 月、4 月、5 月、6 月、7 月、8 月、9 月、10 月、11 月、12 月) 。

YYYY

年。

HH

军事时间 (22 的小时值为晚上 10:00,例如) 。

毫米

分钟值。

SS

第二个值。

对于永久性 Cookie,使用模式 domain=domain_name指定域名是可选的,用于指示 Cookie 对其有效的域的末尾。 拒绝指定域的会话 Cookie。 如果指定的域名结尾与请求匹配,则 Cookie 会尝试匹配路径,以确定是否应发送 Cookie。 例如,如果域名结尾为 .microsoft.com,则会检查对 home.microsoft.com 和 support.microsoft.com 的请求,以查看指定的模式是否与请求匹配。 域名中必须至少有两个或三个句点,以防止为广泛使用的域名结尾(如 .com、.edu 和 co.jp)设置 Cookie。 允许的域名类似于 .microsoft.com、.someschool.edu 和 .someserver.co.jp。 只有指定域中的主机才能为域设置 Cookie。

使用 pattern path=some_path 设置路径是可选的,可用于指定 Cookie 有效 URL 的子集。 如果指定了路径,则 Cookie 被视为对与该路径匹配的任何请求有效。 例如,如果指定路径为 /example,则路径为 /examplecode 和 /example/code.htm 的请求将匹配。 如果未指定路径,则假定该路径是与Set-Cookie标头关联的资源的路径。

Cookie 还可以标记为安全,这指定只能将 Cookie 发送到 https 服务器。

最后,可以将 Cookie 标记为 HttpOnly (属性不区分大小写) ,以指示该 Cookie 不可编写脚本,并且出于安全原因不应透露给客户端应用程序。 在 Windows Internet 中,这意味着无法通过 InternetGetCookie 函数检索 Cookie。

Cookie 标头包含在具有其域和路径与请求匹配的 Cookie 的任何 HTTP 请求中。 Cookie 标头具有以下格式:

Cookie: <name>=<value> [;<name>=<value>]...

使用格式 名称=值的一个或多个字符串序列包含 Cookie 中设置的信息。

生成 Cookie

有三种方法可用于为 Microsoft Internet Explorer 生成 Cookie:使用 Microsoft JScript、使用 WinINet 函数以及使用 CGI 脚本。 所有方法都需要设置包含在 Set-Cookie 标头中的信息。

使用动态 HTML (DHTML) 对象模型,可以通过调用文档对象的 cookie 属性来设置 Cookie ,如以下示例所示。

<SCRIPT language="JavaScript">
<!--
    document.cookie = "SomeValueName = Some_Value";
-->
</SCRIPT>

Cookie 可由使用 InternetSetCookie 函数的应用程序创建。 有关详细信息,请参阅 设置 Cookie

Cookie 通过将 Set-Cookie 标头作为 CGI 脚本的一部分包含在对请求的 HTTP 响应中来生成。

以下示例是包含使用 Perl 的 Set-Cookie 标头的 CGI 脚本。

print "Set-Cookie:Test=test_value; 
      expires=Sat, 01-Jan-2000 00:00:00 GMT;
      path=/;"

注意

WinINet 不支持服务器实现。 此外,不应从服务使用它。 对于服务器实现或服务,请使用 Microsoft Windows HTTP Services (WinHTTP)