程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Cookie的建立使用

Cookie的建立使用

編輯:Delphi

  CookIEs是一種Web服務器在客戶端存儲和返回信息的機制

  這種簡單的、永久的和基於客戶端的狀態信

  息大大的擴充了基於Web的客戶/服務器(ClIEnt/Server)應用程序的能力。因此廣泛應用在大量的實際中,

  例如所有訂閱Microsoft公司的MSDN的用戶、訪問過Borland Online的用戶,以及訪問過的主頁本地存儲

  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;

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved