Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:网络技术    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  Cookie 的使用来弥补 http 的缺陷  
 
Cookie 的使用来弥补 http 的缺陷


  HTTP协议是非常强大的。不过,他有一个缺陷就是不记忆状态。这意味着,当一次HTTP会话结束后,不管是客户还是服务器,都不记忆刚刚发生的会话。这有可能导致一些麻烦,因为服务器无法知道一些重要的事情,诸如口令、发给客户的纪录等。 
  
  HTTP协议提供了一个基本方法能让客户的机器中保存一些信息,这样,服务器就能从中知道上一次HTTP会话的的情况,这就是所谓的Cookie。  Cookie实际是个字符串,他的格式是 CookieName=CookieValue。Cookie中不应该有分号或逗号。客户能拒绝Cookie,所以所有一个Web应用程式不能认为客户的机器肯定有Cookie。察看Cookie的情况能在视窗系统\Cookies中找。  在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。 

DL.bitsCN.com网管软件下载

   在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
bitsCN.Com

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站