Cookie的使用来弥补http的缺陷

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

HTTP协议是非常强大的。不过,它有一个缺陷就是不记忆状态。这意味着,当一次HTTP会话结束后,不管是客户还是服务器,都不记忆刚刚发生的会话。这有可能导致一些麻烦,因为服务器无法知道一些重要的事情,诸如口令、发给客户的纪录等。

HTTP协议提供了一个基本方法可以让客户的机器中保存一些信息,这样,服务器就可以从中知道上一次HTTP会话的的情况,这就是所谓的Cookie。

Cookie实际是一个字符串,它的格式是 CookieName=CookieValue。Cookie中不应该有分号或逗号。客户可以拒绝Cookie,所以任何一个Web应用程序不能认为客户的机器肯定有Cookie。察看Cookie的情况可以在WindowsCookies中找。

在Delphi中管理Cookie是一件非常容易的事。

THTTPRequest和THTTPResponse都封装了用来处理Cookie的特性和方法,允许您控制怎样读写Cookie。

要设置Cookie的内容,您可以调用TWebResponse的SetCookieField的方法。这个方法需要传递一个TStrings对象作为Cookie的内容以及这个Cookie的限制条件。

SetCookieField()方法是这样声明的:

procedure SetCookieField(Values:TStrings;const ADomain,APath:string;AExpires:TDateTime;ASecure:Boolean);Values参数是一个TStrings对象(也可以使用TStringList对象),用于指定Cookie的实际内容。Values中可以包含多个Cookie。ADomain 参数用于限制服务器的域,Cookie只对特定域的服务器是有效的。如果这个参数为空,Cookie将被传递给任何一个服务器。一般情况下,应当把这个参数设为Web服务器的域名。

APath参数用于指定一组路径,Cookie只在特定的路径下是合法的。AExpires参数用于指定Cookie在多长时间内是合法的,由于时差的原因,这个时间应当基于GMT时区。如果您想使Cookie的有效时间是10天,就应当把这个参数设为Now+10。如果要使一个Cookie无效,这个参数可以设为过去的一个时间。注意,一个Cookie无效后,就不会被传递给服务器,但并不从客户机中删除。ASecure参数是一个boolean值,如果这个参数设为True,表示Cookie只能通过HTTP或SSL传递。一般情况,这个参数设为False。

在Web服务器端,您可以通过TWebRequest的CookieFields特性访问由客户传递来的Cookie。这个特性是一个TStrings对象,每个Cookie的格式是param=value。调用TWebRequest的ExtractCookieFields()方法可以把多个Cookie分解为一个个字符串。

Cookie可以保存任何字符串所能表达的信息。Cookie的长度最多可达4KB,客户的机器最多可以保存300个Cookie.每个服务器或域的Cookie不超过20个。下面举一个例子说明Cookie的应用:var

CookList : TStringList;

iBZ,fcbz:integer;begin

CookList := TStringList.Create;

try

CookList.Add('NSRID='+ sNSRID);

CookList.Add('NSRMC=' + sNSRMC);

CookList.Add('WJBM=' + sWJBM);

CookList.Add('YHZH=' + sYHZH);

iBZ:=0;

fcbz:=0;

CookList.Add('BZ=' + IntToStr(iBZ));

CookList.Add('FCBZ=' + IntToStr(fcbz));

Response.SetCookieField(cookList,'','',Now+10,False);

finally

cookList.Free;

End;

End;//创建Cookie

iBZ:=StrToInt(Request.CookieFields.Values['BZ']);//使用Cookie

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航