在Web开发中,HTTP Cookies是一种重要的机制,用于在客户端和服务器之间保持状态信息。Cookies本质上是存储在用户计算机上的小数据包,允许服务器或脚本在HTTP协议下维护客户端工作站的状态信息。本文将详细解释Cookies的概念、作用以及如何在Web开发中使用Cookies。
Cookie是一种小的数据包,用于存储用户计算机上的持久状态信息。在HTTP协议下,服务器或脚本可以通过Cookies来维护客户端工作站的状态信息。这种机制允许基于Web的应用程序存储关于选定项目、用户偏好、注册信息等的信息,这些信息可以在以后检索。
有两个HTTP头与Cookies相关:
Set-Cookie响应头使用以下格式:
Set-Cookie: =[; =]... [; expires=]; domain=] [; path=]; secure]
必须包含一个或多个字符串序列(由分号分隔),遵循模式
通过使用格式expires=
来设置过期日期,其中DAY, DD-MMM-YYYY HH:MM:SS GMT
。
使用模式domain=
是可选的,用于指示持久Cookie的有效域名。如果指定的域名结尾与请求匹配,Cookie尝试匹配路径以确定是否应该发送Cookie。
使用模式path=
是可选的,并且可以用来指定Cookie有效的URL子集。如果指定了路径,那么任何匹配该路径的请求都被认为是有效的。
Cookie也可以被标记为安全,这指定Cookie只能发送到HTTPS服务器。
Cookie头包含在任何具有匹配域和路径的Cookie的HTTP请求中。Cookie头的格式如下:
Cookie: = [;=]...
一个或多个字符串序列,使用格式
Netscape Navigator和Internet Explorer以不同的方式存储Cookies,尽管它们从服务器捕获相同的材料。Netscape Navigator将每个Cookie存储在名为cookies.txt
的单个文件中,而Internet Explorer则将每个Cookie存储在自己的文件中。
默认方法加载到浏览器上,是一个简单的表单,用户可以输入他们想要的Cookie名称/值对。所有工作都在GetCookie方法中完成。为了能够在客户端机器上写入Cookie值,必须通知IIS服务器不要写入自己的头:
// Turn off sending header by MFC. pCtxt->m_bSendHeaders = FALSE;
包含Cookies的头将由程序使用ServerSupportFunction HTTP函数写入客户端计算机:
// Send our own headers. if (!pCtxt->ServerSupportFunction (HSE_REQ_SEND_RESPONSE_HEADER, NULL, &dwSize, (LPDWORD ) szHeaders)) { ISAPITRACE1 ("ServerSupportFunction failed: %d\n", GetLastError()); // Report an error. return; }
HTML表单的参数值将通过POSTHTTP数据传输接收到GetCookie方法中,并随后写入客户端。
Set-Cookie:Test=test_value; expires=Sat, 01-Jan-2000 00:00:00 GMT; path=/;