Cookie的建立使用 (轉)
Cookie的建立使用
是一種在客戶端和返回資訊的機制
這種簡單的、永久的和基於客戶端的狀態信
息大大的擴充了基於Web的客戶/伺服器(Client/Server)應用的能力。因此廣泛應用在大量的實際中,
例如所有訂閱公司的MSDN的、訪問過Borland Online的使用者,以及訪問過的主頁本地儲存
Cookie,以便下次訪問時提供上次訪問的記錄。
3是Borland公司1997年推出的視覺化、面向的高的應用程式開發工具(RAD),提供
了大量的最新功能,例如開發COM/DCOM,一步開發物件,多層應用程式MIDAS等,並且使用
Delphi 3開發基於Web伺服器的程式,如IS/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發現在中文 95和NT環境下該程式
有錯誤。 根據scape公司的規定
Cookie的格式應為: Set-Cookie: Name=Value; expires=DATA;
Path=PATH; ain=DOMAIN_NAME; secure而且根據規定
日期(DATA)的設定必須滿足格式“Wdy
DD-Mon-YYYY HH:MM:SS GMT”
基於822
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透過)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-976379/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript 建立CookieJavaScriptCookie
- Cookie 由誰建立Cookie
- Flask - Cookie的使用FlaskCookie
- jQuery的Cookie使用jQueryCookie
- JavaScript 建立與讀取cookieJavaScriptCookie
- cookie與session的使用CookieSession
- Gin(八):cookie的使用Cookie
- js-cookie.js的使用JSCookie
- 如何獲取Cookie並使用Cookie侵入Cookie
- Laravel 之 Cookie 使用LaravelCookie
- Python3中關於cookie的建立與儲存PythonCookie
- localStorage,sessionStorage和cookie的區別及使用SessionCookie
- cookie的使用方法以及注意事項Cookie
- npm包:js-cookie的簡單使用NPMJSCookie
- 【轉載】使用 BAPI_BUPA_CREATE_FROM_DATA 建立BPAPI
- ASP.NET MVC下使用AngularJs語言(七):Cookie的使用ASP.NETMVCAngularJSCookie
- 3、爬蟲-selenium-獲取使用者cookie的使用爬蟲Cookie
- [譯]使用Laravel訪問前端CookieLaravel前端Cookie
- 新增cookie、刪除cookie、清除cookieCookie
- 介面測試--apipost中cookie管理器的使用APICookie
- Activity建立與跳轉
- NFT 的建立和轉移功能實現
- 使用java建立新的程序Java
- oracle 序列的建立與使用Oracle
- cookie的設定Cookie
- localStorage、sessionStorage、Cookie的SessionCookie
- cookie之登入使用者憑證Cookie
- Selenium使用Cookie實現自動登入Cookie
- 【轉】[C#] 建立返回多個值的方法C#
- Java操作Cookie之新增CookieJavaCookie
- 140 form自定錯誤和鉤子,django中cookie的使用ORMDjangoCookie
- cocoaPods私有庫的建立與使用
- 使用postman建立Marketing Cloud的ContactPostmanCloud
- SqlServer遊標的建立與使用SQLServer
- Flutter 外掛的建立及使用Flutter
- CookieCookie
- Cookie 的 SameSite 屬性Cookie
- 捕獲cookie的值Cookie
- 神奇的Cookie互通魔法Cookie