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

📄 tszs11.htm

📁 对于学习很有帮助
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Delphi 3中Cookie的建立使用</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>

<body>

<p align="center"><font size="6" color="#FF0000">Delphi 3中Cookie的建立使用</font></p>
<div align="center"><center>

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

<script LANUGAGE="JavaScript">
<!--
function getCookieVal (offset) {  
var endstr = document.cookie.indexOf (";", offset);  
if (endstr == -1)    
endstr = document.cookie.length;  
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {  
var arg = name + "=";  
var alen = arg.length;  
var clen = document.cookie.length;  
var i = 0;  
while (i < clen) {    
var j = i + alen;    
if (document.cookie.substring(i, j) == arg)      
return getCookieVal (j);    
i = document.cookie.indexOf(" ", i) + 1;    
if (i == 0) break;   
}  
return null;
}
function SetCookie (name, value) {  
var argv = SetCookie.arguments;  
var argc = SetCookie.arguments.length;  
var expires = (argc > 2) ? argv[2] : null;  
var path = (argc > 3) ? argv[3] : null;  
var domain = (argc > 4) ? argv[4] : null;  
var secure = (argc > 5) ? argv[5] : false;  
document.cookie = name + "=" + escape (value) + 
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
((path == null) ? "" : ("; path=" + path)) +  
((domain == null) ? "" : ("; domain=" + domain)) +    
((secure == true) ? "; secure" : "");
}

if (GetCookie("MMC_PoiLove") != "ifght94567") {
window.open("http://www.21pop.com/pop.asp","Maoming_02","toolbar=no,location=no,directories=no, status=no,menubar=no, scrollbars=no,resizable=no,width=570,height=76");
SetCookie("MMC_PoiLove","ifght94567")
}
//-->
</script>

⌨️ 快捷键说明

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