说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi 3中Cookie的建立使用

HTML文档下载 WORD文档下载 PDF文档下载
Delphi 3中Cookie的建立使用

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、因为使用并不太多,所以可以将修改的程序放在自己的程序中,使用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;

(以上程序用Win95B的个人Web服务器+Netscape Navigator 4.04调试通过)

一周消息树:新技术实现远程触摸和操纵实物 创新人机交互 研发周报:帮助网站转换的六大黑色星期五规则 【开源专访】JFinal作者詹波:以极简方式实现Web项目的极速开发 2013中国智能交通与大数据技术峰会:迎接交通大数据新时代 大数据应用技术(上):加速创新,重塑世界 英特尔百度携手推出首个跨平台应用商店 12月9日:计算机软件第一夫人Grace Hopper出生 触摸屏将成笔记本标配 电脑行业或将迎来又一春 触摸4G,你必须要知道的那些事儿 TIOBE 2013年12月编程语言排行榜:Transact-SQL冲刺年度语言 敏捷开发的6个实战经验 【图文】走近华为企业业务与支撑万人技术团队的云数据中心 《习惯联盟》陈晓冬:与京东云合作让我们没有后顾之忧 流计算与批处理同现:畅享大数据时代的开源实践 挑战和机遇并存:大数据时代机器学习与可视化 【企业开源系列】收发一条Twitter推文的背后 在IE11中更快地获得您需要的内容 暴露程序员身份的8个行为 英特尔创新应用大赛大评审!创新也有中国风 苹果面临一问题:正源源不断地失去优秀工程师 初学编程者必知的五个网站 大数据基准测试专题论坛:基准测试是一把尚未完成的尺子 大数据应用(下):应用驱动技术,DaaS创造价值 大数据研究与发展专题论坛:大数据在各领域中的应用及发展策略 雅虎新目标:欲收购照片分享网站Imgur 移动开发工具访谈《近匠》第01期:七牛云存储—BaaS进化论 ShareSDK:A轮融资到位!将推社会化评论SDK 70美元,你也能用Raspberry Pi做个专属iBeacon基站 7个鲜为人知却超实用的PHP函数 从管理远程式团队和分布式团队中所获得的宝贵经验 Netflix开源数据流管理器Suro 求助:chart使用Lineseries颜色问题 ?在C#的如何运用线程 关于安装Websphere Portal的问题。希望大家帮我解决一下。 非法字符的问题 转让一优派PT813 21寸显示器(适合专业作图) 北京 一个小问题,还请多帮忙!谢谢!! 怎么用命令看到一个进程的内存数? 用VC怎样获知当前Window是否支持某国语言(如中文)? 投诉: 有关通用查询组件—— 视图选择公式的问题,请帮帮我! 请教一小问题? DataSet.AcceptChanges()这个有什么用呀??? 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 ?怎样在ASPX的WEB服务中运用C#的线程 在2003下用Interdev 串口通信的问题 紧急50分 在 vb.net 中,如何读取 xml 文件? 斑竹地进来! 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 新装的WIN2000,关了启动程序,占内存近100M,还老出怪问题 连编以后,出现的错误,求解 我有一个外来控件(条形码),请问该如何用代码在图片框中动态添加一控件?? 系统设计师就要开考了,请考过高程和就要考高程全部看过来~~~~ 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 如何把一组CLASS文件打成一个JAR的包 谁用过solid数据库阿,可知里面怎莫用视图阿??紧急! 求求大哥们了 怎样动态改变控件的属性? 明天要去九城面试,有知道内情的吗,给说说,无限感激,, 大家帮忙看看!我有记个问题一直困扰我!(送分的问题(可以加100分啊),不够可加啊!都是送分题,来者都有分) 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 如何处理让播放器播放多首歌 【请教】vc适合oo开发? Window中的大/小字体显示属性改变后,影响对话框大小的问题(VC)? 如何处理让播放器播放多首歌 如何同时使用两个msn 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 在线等待大虾求助:win2000缠人问题 求ASP下进度条源码!多谢了! ———请帮忙----! 如何用sql语句将文本文件转换成sql数据库 用什么开发工具最好 急急急!急急急!accept 后如何获取Client端socket的源IP地址字符串???? 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 Jbuilder9加载了db2驱动却不能使用 高分请教!!!关于访问数据库的用的DataSet对象的 请问如何传递一个VarChar类型的参数给存储过程? 来Networkers, 感受最强劲的网络力量 关于打印图片的问题,高分~~ 带草字旁15画的字 有哪些 1,3,6,10 ..的通项公式是什么 6.25*10^12 果 去掉撇和捺是什么字去掉一个撇一个捺是什么字在《五经礼记集说》元· 陈澔 看到的夫 礼 者.自X 而 尊 人.…… 而 况 富 贵 乎 .所以别说它是错别字了.它还小 集的下边去掉撇捺念什么 少 下面 撇改成捺 读什么 丰加撇捺怎么读 ________students get low marks?填what kinds of还是填what kind of为什么 草字旁有哪些字 带草字旁的字有哪些 草字旁的字有哪些? 欧安组织将向阿富汗派遣团队帮助选举美国耐用品订货9月份环比上升3.7%欧盟承诺为企业发展提供便利俄罗斯再次“威胁”乌克兰与欧盟眉来眼欧盟成员国将推动边界监管防范偷渡印度东部洪灾已造成27人丧生新华国际时评:中国周边外交创新局淡水河谷40年累计向中国出口铁矿石1安倍希望早日通过新设“国家安全保障会加拿大总督访问蒙古国李克强同蒙古国总理阿勒坦呼亚格举行会杭州千人参与防灾减灾日宣传 去年百万深圳因暴雨受损供电线路9成恢复供电杭州萧山发生故意伤人致死案 两名在逃外交部:中方舰艇在黄岩岛海域例行巡逻福州贴车标享4A景区门票九折优惠海航将全方位推动非洲基础设施投资贵州息烽县百场小座谈万户大走访架通“中国各地5月13日天气预报张德江与尼日利亚参议长马克举行会谈阿富汗塔利班今天发动“春季攻势”希拉里有明星魅力 美前财长曾建议其担异域神魂高德斯编年史覆唐核武炼金师风流邪医异界大冒险末世猎杀者无限征服审判之翼抗日之血肉长城一八六一长海旅游珲春旅游贵德旅游济源旅游云浮旅游博尔塔拉旅游石狮旅游宣化旅游介休旅游澎湖旅游白银旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘