📄 32.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://bbs.tsinghua.edu.cn"><font face="黑体"><big><big>水木清华★</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center"> Delphi编程 (BM: strayli FlyingBoy) </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="454"> <p align="center">[<a href="index.htm">回到开始</a>][<a href="3.htm">上一层</a>][<a href="33.htm">下一篇</a>]
<hr><p align="left"><small>发信人: strayli (stray), 信区: Delphi <br>
标 题: Delphi 3中Cookie的建立使用(转) <br>
发信站: BBS 水木清华站 (Sat Oct 17 21:14:25 1998) WWW-POST <br>
<br>
Delphi 3中Cookie的建立使用: <br>
<br>
Cookies是一种Web服务器在客户端存储和返回信息的机制,这种简单的、永久的和基于 <br>
客 <br>
户端的状态信息大大的扩充了基于Web的客户/服务器(Client/Server)应用程序的能力。 <br>
因此 <br>
广泛应用在大量的实际中,例如所有订阅Microsoft公司的MSDN的用户、访问过Borland <br>
<br>
Online的用户,以及访问过我的主页(http://www.nease.net/~borland)的用户都会在本 <br>
地存储 <br>
Cookie,以便下次访问时提供上次访问的记录。 <br>
<br>
Delphi 3是Borland公司1997年推出的可视化、面向对象的高效率的快速应用程序开发 <br>
工 <br>
具(RAD),提供了大量的最新功能,例如开发COM/DCOM,一步开发ActiveX对象,多层 <br>
数据库应用程序MIDAS等,并且使用Delphi 3开发基于Web服务器的程序,如ISAPI/NSAPI <br>
, <br>
Win-CGI,CGI程序都十分方便。 <br>
<br>
<br>
使用Delphi 3开发Web Server程序是非常简单,方便的,因为在Delphi中提供了Web <br>
Module、TWebApplication、TWebRequest、TWebResponse、TPageProducer等大量的对 <br>
象供使用.对于Cookie,Delphi3也提供了大量的程序供使用,如TWebResponse.Cookies, <br>
TWebResponse.SetCookieField,TWebRequest.Cookie,TWebRequest.CookieFields, <br>
TWebRequest.ExtractCookieFields等,应该是非常方便。但本人为了实现一功能需要设 <br>
置 <br>
Cookie,但是发现使用Delphi提供的SetCookieFields设置不成功,经研究Delphi 3所带 <br>
的 <br>
HttpApp.Pas和IsapiApp.Pas文件发现在中文Windows 95和NT环境下该程序有错误。 <br>
<br>
根据Netscape公司的规定,Cookie的格式应为: <br>
Set-Cookie: Name=Value; expires=DATA; Path=PATH; domain=DOMAIN_NAME; secure <br>
而且根据规定,日期(DATA)的设置必须满足格式“Wdy, DD-Mon-YYYY HH:MM:SS GMT”, <br>
基于RFC822, RFC850, RFC1036和RFC1123等规定,但是检查HTTPAPP.PAS中的function <br>
TCookie.GetHeaderValue: string中为FormatDateTime('"expires="' + DateFormat + <br>
' "GMT; "', <br>
Expires);,其中const DateFormat = 'ddd, dd mmm yyyy hh:mm:ss',此程序在英文环境 <br>
中产生的格 <br>
式是正确的,但是在中文中产生的结果却不对,因为星期和月份都将按照中文的表示方法: <br>
如 <br>
将11月生产“十一月”中文串,这样在Netscape Navigator和Microsoft Internet <br>
Explorer就不 <br>
Explorer就不 <br>
能辨认了。 <br>
<br>
既然错误在于原VCL未考虑中文环境的问题,所以修改的方法有:1、修改VCL源程序, <br>
<br>
编译后将dcu文件拷贝到Lib目录,这样会完全改正错误,这样是最根本的解决方法,但是 <br>
<br>
如果将源程序放在另一未修改的Delphi中(例如提供源程序给别人和自己重新安装)编译又 <br>
将 <br>
出现问题。2、因为使用并不太多,所以可以将修改的程序放在自己的程序中,使用 <br>
Delphi 3 <br>
提供的TWebResponse.SetCustomHeader设置,这样的好处是将程序放在自己的程序内,重 <br>
新 <br>
装Delphi或在另一台计算机上编译的结果也会完全正确。因为Cookie的目的一般有两种, <br>
一 <br>
种是在此会话过程中使用,过后不使用,此时不需要Expires段,不会产生时间错误,可 <br>
以 <br>
使用Delphi 3提供的所有Cookie程序;另一种为永久保存,时间一般越长越好,于是可以 <br>
将 <br>
时间设置为2099年二月22日, 于是程序中设置Cookie的方法为: <br>
Response.SetCustomHeader('Set-Cookie','Name=Value; expires=Sun, 22 Feb 2099 <br>
08:08:08 <br>
GMT'); (注斜体用自己的名称代替,例如设置Count=10,则Name用Count代替,Value <br>
用10代替),这样就可以建立Cookie了. <br>
<br>
以下为建立一个访问计数器的程序,可以参照: <br>
const <br>
LastIp:String='0:0:0:0'; //避免重复计数 <br>
Var <br>
S:String; <br>
Count:Integer; <br>
begin <br>
S:=Request.CookieFields.Values['count']; <br>
if S<>'' then begin <br>
try <br>
Count:=StrToInt(S); <br>
Except <br>
Count:=0; <br>
End; <br>
end else Count:=0; <br>
if LastIp<>Request.RemoteAddr then Inc(Count); <br>
LastIp:=Request.RemoteAddr; <br>
Response.SetCustomHeader('Set-Cookie','count='+IntToStr(Count)+'; <br>
expires=Sun, 21 Feb 2010 <br>
08:08:08 GMT'); <br>
t='+IntToStr(Count)+'; <br>
expires=Sun, 21 Feb 2010 <br>
08:08:08 GMT'); <br>
Response.Content:='您是第'+IntToStr(Count)+'来到本页!'; <br>
End; <br>
<br>
(以上程序用Win95B的个人Web服务器+Netscape Navigator 4.04调试通过) <br>
<br>
作者:傅贵 <br>
<br>
-- <br>
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.38.66.149] <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="3.htm">上一层</a>][<a href="33.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -