⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cookie的建立使用 (2000年11月22日).txt

📁 自己对DELPHI学习的一点体会
💻 TXT
字号:
Cookie的建立使用 (2000年11月22日) 

本站更新  分类:   作者:srw  推荐:   阅读次数:439  
(http://www.codesky.net)  

--------------------------------------------------------------------------------
Cookie的建立使用

根据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目录,这样会完全改正错误,这样是
2、 最根本的解决方法,但是如果将源程序放在另一未修改的Delphi中(例如提供源程序给
3、 别人和自己重新安装)编译又将出现问题。
2、因为使用并不太多,所以可以将修改的程序放在自己的程序中,使用Delphi 3提供的
TWebResponse.SetCustomHeader设置,这样的好处是将程序放在自己的程序内,重新装Delphi
或在另一台计算机上编译的结果也会完全正确。因为Cookie的目的一般有两种,一种是在
此会话过程中使用,过后不使用,此时不需要Expires段,不会产生时间错误,可以使用Delphi 
3提供的所有Cookie程序;另一种为永久保存,时间一般越长越好,于是可以将时间设置
为2099年二月22日, 于是程序中设置Cookie的方法为: 
Response.SetCustomHeader('Set-Cookie','Name=Value; expires=Sun, 22 Feb 2099 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; 

 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -