Cookie的建立籅使用 |
|
Kenlin2004
一般會員 ![]() ![]() 發表:20 回覆:33 積分:10 註冊:2004-10-27 發送簡訊給我 |
Cookies是一種Web服務器在客戶端存儲和返回信息的機制 這種簡單的、永久的和基於客戶端的狀態訊息大大的擴充了Web-Client/Server應用程序的能力。因此廣泛應用在大量的實際中, 例如所有訂閱Microsoft公司的MSDN的用戶、訪問過Borland Online的用戶,以及訪問過的主頁本地存儲 Cookie,以便下次訪問時提供上次訪問的記錄。 對於Cookie Delphi也提供了大量的程序供使用
如TWebResponse.Cookies,TWebResponse.SetCookieField,TWebRequest.Cookie,TWebRequest.CookieFields,TWebRequest.ExtractCookieFields等,應該是非常方便。 根據Netscape公司的規定
Cookie的格式應為: Set-Cookie: Name=Value; expires=DATA;
Path=PATH; domain=DOMAIN_NAME; secure而且根據規定
日期(DATA)的設置必須滿足格式「WdyDD-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提供的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; ======================================
技術是追不完地,量力而為!
======================================
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |