線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1556
推到 Plurk!
推到 Facebook!

Delphi 3中Cookie的建立使用:

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-30 20:45:06 IP:61.221.xxx.xxx 未訂閱
此為轉貼資料 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;
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-04-25 8:24:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!