关于超想
本站导航
邮件列表
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> 网络通讯 ->详细
相关内容  
 
 
在程序运行期设置QUERY控件的PARAMS
 
【新品推荐】

  详细内容
 

Delphi 3中Cookie的建立使用
作者: 评价: 上站日期: 2001-05-09
内容说明:
来源:

  Cookies是一种Web服务器在客户端存储和返回信息的机制,这种简单的、永久的和基于客户端的状态信息大大的扩充了基于Web的客户/服务器(Client/Server)应用程序的能力。因此广泛应用在大量的实际中,例如所有订阅Microsoft公司的MSDN的用户、访问过Borland Online的用户,以及访问过我的主页(http://www.nease.net/~borland)的用户都会在本地存储Cookie,以便下次访问时提供上次访问的记录。

Delphi 3是Borland公司1997年推出的可视化、面向对象的高效率的快速应用程序开发工具(RAD),提供了大量的最新功能,例如开发COM/DCOM,一步开发ActiveX对象,多层数据库应用程序MIDAS等,并且使用Delphi 3开发基于Web服务器的程序,如ISAPI/NSAPI, Win-CGI,CGI程序都十分方便。 

使用Delphi 3开发Web Server程序是非常简单,方便的,因为在Delphi中提供了Web Module、TWebApplication、TWebRequest、TWebResponse、TPageProducer等大量的对 象供使用.对于Cookie,Delphi3也提供了大量的程序供使用,如TWebResponse.Cookies, TWebResponse.SetCookieField,TWebRequest.Cookie,TWebRequest.CookieFields, TWebRequest.ExtractCookieFields等,应该是非常方便。但本人为了实现一功能需要设置 Cookie,但是发现使用Delphi提供的SetCookieFields设置不成功,经研究Delphi 3所带的HttpApp.Pas和IsapiApp.Pas文件发现在中文Windows 95和NT环境下该程序有错误。 

根据Netscape公司的规定,Cookie的格式应为:Set-Cookie: Name=Value; expires=DATA; Path=PATH; domain=DOMAIN_NAME; secure 而且根据规定,日期(DATA)的设置必须满足格式“Wdy, DD-Mon-YYYY HH:MM:SS GMT”, 基于RFC822, RFC850, RFC1036和RFC1123等规定,但是检查HTTPAPP.PAS中的function TCookie.GetHeaderValue: string中为FormatDateTime('"expires="' + DateFormat + ' "GMT; "',Expires);,其中const DateFormat = 'ddd, dd mmm yyyy hh:mm:ss',此程序在英文环境中产生的格式是正确的,但是在中文中产生的结果却不对,因为星期和月份都将按照中文的表示方法:如将11月生产“十一月”中文串,这样在Netscape Navigator和Microsoft ;Internet Explorer就不能辨认了。 

既然错误在于原VCL未考虑中文环境的问题,所以修改的方法有:1、修改VCL源程序,编译后将dcu文件拷贝到Lib目录,这样会完全改正错误,这样是最根本的解决方法,但是如果将源程序放在另一未修改的Delphi中(例如提供源程序给别人和自己重新安装)编译又将出现问题。2、因为使用并不太多,所以可以将修改的程序放在自己的程序中,使用 Delphi3提供的TWebResponse.SetCustomHeader设置,这样的好处是将程序放在自己的程序内,重新装Delphi或在另一台计算机上编译的结果也会完全正确。因为Cookie的目的一般有两种,一种是在此会话过程中使用,过后不使用,此时不需要Expires段,不会产生时间错误,可以使用Delphi3提供的所有Cookie程序;另一种为永久保存,时间一般越长越好,于是可以将时间设置为2099年二月22日,于是程序中设置Cookie的方法为: 

 Response.SetCustomHeader('Set-Cookie','Name=Value;expires=Sun,22Feb2099 08:08:08 GMT');(注斜体用自己的名称代替,例如设置Count=10,则Name用Count代替,Value 
用10代替),这样就可以建立Cookie了. 

以下为建立一个访问计数器的程序,可以参照: 
const  
 LastIp:String='0:0:0:0'; //避免重复计数  
Var  
 S:String;  
 Count:Integer;  
begin  
 S:=Request.CookieFields.Values['count'];  
  if S< > '' then begin  
   try  
  Count:=StrToInt(S);  
   Except  
  Count:=0;  
   End;  
  end else Count:=0;  
  if LastIp< > Request.RemoteAddr then Inc(Count);  
 LastIp:=Request.RemoteAddr;  
 Response.SetCustomHeader('Set-Cookie','count='+IntToStr(Count)+'; 
expires=Sun, 21 Feb 2010  08:08:08 GMT');  
 Response.Content:='您是第'+IntToStr(Count)+'来到本页!';  
End;  


 

 
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> 网络通讯 ->详细
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
声明:本站内容除注明原创以外均从网上摘抄,如有侵权请指明。
  如果您对我们的网站有什么意见或者建议,请与我们联系
powered by 建站易上手- V2.0