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

📄 007.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题--网络应用-->Delphi 3中Cookie的建立使用</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题--网络应用 Delphi 3中Cookie的建立使用">
<META NAME="description" CONTENT=" - DELPHI专题--网络应用 - Delphi 3中Cookie的建立使用">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index4.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">Delphi 3中Cookie的建立使用</FONT></B></center> 
<hr color="#EE9B73" size="1" width="94%"> 
<p><span class="p9t"> </span>Cookies是一种Web服务器在客户端存储和返回信息的机制,这种简单的、永久的和基于客&nbsp;户端的状态信息大大的扩充了基于Web的客户/服务器(Client/Server)应用程序的能力。&nbsp;因此 
&nbsp;<br> 
广泛应用在大量的实际中,例如所有订阅Microsoft公司的MSDN的用户、访问过Borland&nbsp;&nbsp;<br> 
Online的用户,以及访问过我的主页(http://www.nease.net/~borland)的用户都会在本&nbsp;地存储 
&nbsp;<br> 
Cookie,以便下次访问时提供上次访问的记录。&nbsp; &nbsp;&nbsp;<br> 
&nbsp;&nbsp;Delphi&nbsp;3是Borland公司1997年推出的可视化、面向对象的高效率的快速应用程序开发&nbsp;工 
&nbsp;<br> 
具(RAD),提供了大量的最新功能,例如开发COM/DCOM,一步开发ActiveX对象,多层 
&nbsp;<br> 
数据库应用程序MIDAS等,并且使用Delphi&nbsp;3开发基于Web服务器的程序,如ISAPI/NSAPI&nbsp;<br> 
, &nbsp;Win-CGI,CGI程序都十分方便。&nbsp; &nbsp;&nbsp;<br> 
&nbsp;&nbsp;&nbsp; 使用Delphi&nbsp;3开发Web&nbsp;Server程序是非常简单,方便的,因为在Delphi中提供了Web 
&nbsp;&nbsp; &nbsp;Module、TWebApplication、TWebRequest、TWebResponse、TPageProducer等大量的对 
&nbsp;<br> 
象供使用.对于Cookie,Delphi3也提供了大量的程序供使用,如TWebResponse.Cookies, 
&nbsp;TWebResponse.SetCookieField,TWebRequest.Cookie,TWebRequest.CookieFields, 
&nbsp;TWebRequest.ExtractCookieFields等,应该是非常方便。但本人为了实现一功能需要设&nbsp;置 
&nbsp;<br> 
Cookie,但是发现使用Delphi提供的SetCookieFields设置不成功,经研究Delphi&nbsp;3所带&nbsp;的 
&nbsp;<br> 
HttpApp.Pas和IsapiApp.Pas文件发现在中文Windows&nbsp;95和NT环境下该程序有错误。 
&nbsp;&nbsp; &nbsp;<br> 
 &nbsp;根据Netscape公司的规定,Cookie的格式应为:&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp; Set-Cookie:&nbsp;Name=Value;&nbsp;expires=DATA;&nbsp;Path=PATH;&nbsp;<br> 
&nbsp;&nbsp;&nbsp; domain=DOMAIN_NAME;&nbsp;secure&nbsp;&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp; 而且根据规定,日期(DATA)的设置必须满足格式“Wdy,&nbsp;DD-Mon-YYYY&nbsp;HH:MM:SS&nbsp;GMT”, 
&nbsp;<br> 
基于RFC822,&nbsp;RFC850,&nbsp;RFC1036和RFC1123等规定,但是检查HTTPAPP.PAS中的function 
&nbsp;&nbsp; &nbsp;<br> 
TCookie.GetHeaderValue:&nbsp;string中为FormatDateTime('&quot;expires=&quot;'&nbsp;+&nbsp;DateFormat&nbsp;+&nbsp;&nbsp;<br> 
'&nbsp;&quot;GMT;&nbsp;&quot;',&nbsp; &nbsp;Expires);,其中const&nbsp;DateFormat&nbsp;=&nbsp;'ddd,&nbsp;dd&nbsp;mmm&nbsp;yyyy&nbsp;hh:mm:ss',此程序在英文环境&nbsp;<br> 
中产生的格式是正确的,但是在中文中产生的结果却不对,因为星期和月份都将按照中文的表示方法:&nbsp;如&nbsp;将11月生产“十一月”中文串,这样在Netscape&nbsp;Navigator和Microsoft&nbsp;Internet&nbsp;&nbsp;<br> 
Explorer就不&nbsp;能辨认了。&nbsp; &nbsp;&nbsp;<br> 
&nbsp; &nbsp;&nbsp;既然错误在于原VCL未考虑中文环境的问题,所以修改的方法有:1、修改VCL源程序,&nbsp;&nbsp;<br> 
编译后将dcu文件拷贝到Lib目录,这样会完全改正错误,这样是最根本的解决方法,但是&nbsp;如果将源程序放在另一未修改的Delphi中(例如提供源程序给别人和自己重新安装)编译又将&nbsp;出现问题。2、因为使用并不太多,所以可以将修改的程序放在自己的程序中,使用Delphi&nbsp;3&nbsp;提供的TWebResponse.SetCustomHeader设置,这样的好处是将程序放在自己的程序内,重新&nbsp;装Delphi或在另一台计算机上编译的结果也会完全正确。因为Cookie的目的一般有两种,一&nbsp;种是在此会话过程中使用,过后不使用,此时不需要Expires段,不会产生时间错误,可以使用Delphi&nbsp;3提供的所有Cookie程序;另一种为永久保存,时间一般越长越好,于是可以将时间设置为2099年二月22日,&nbsp;于是程序中设置Cookie的方法为: 
&nbsp; &nbsp;<br> 
 Response.SetCustomHeader('Set-Cookie','Name=Value;&nbsp;expires=Sun,&nbsp;22&nbsp;Feb&nbsp;2099<br>
08:08:08&nbsp;GMT');&nbsp;(注斜体用自己的名称代替,例如设置Count=10,则Name用Count代替,Value&nbsp;用10代替),这样就可以建立Cookie了. 
&nbsp;<br> 
&nbsp;&nbsp;以下为建立一个访问计数器的程序,可以参照:&nbsp; &nbsp;<br> 
const&nbsp; &nbsp;<br> 
&nbsp;&nbsp;LastIp:String='0:0:0:0';&nbsp;//避免重复计数&nbsp; &nbsp;<br> 
Var&nbsp; &nbsp;<br> 
&nbsp;&nbsp;S:String;&nbsp; &nbsp;<br> 
&nbsp;&nbsp;Count:Integer;&nbsp; &nbsp;<br> 
begin&nbsp; &nbsp;<br> 
&nbsp;&nbsp;S:=Request.CookieFields.Values['count'];&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;S&lt;&gt;''&nbsp;then&nbsp;begin&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;Count:=StrToInt(S);&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Except&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;Count:=0;&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End;&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;else&nbsp;Count:=0;&nbsp; &nbsp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;LastIp&lt;&gt;Request.RemoteAddr&nbsp;then&nbsp;Inc(Count); 
&nbsp;&nbsp; &nbsp;<br> 
&nbsp;&nbsp;LastIp:=Request.RemoteAddr;&nbsp; &nbsp;<br> 
&nbsp;&nbsp;Response.SetCustomHeader('Set-Cookie','count='+IntToStr(Count)+';&nbsp;&nbsp;<br> 
expires=Sun,&nbsp;21&nbsp;Feb&nbsp;2010&nbsp; &nbsp;<br> 
08:08:08&nbsp;GMT');&nbsp; &nbsp;<br> 
&nbsp;&nbsp;Response.Content:='您是第'+IntToStr(Count)+'来到本页!';&nbsp; &nbsp;<br> 
End;&nbsp; &nbsp;<br> 
&nbsp;<br> 
(以上程序用Win95B的个人Web服务器+Netscape&nbsp;Navigator&nbsp;4.04调试通过) 
<hr color="#EE9B73" size="1" width="94%"> 
 
</TD> 
 
</TR> 
</table> 
</BODY></HTML>

⌨️ 快捷键说明

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