Blue
Red
Green
Orange
Voilet
Slate
Dark

谁能给出一个读/写Cookie的示例(100分)

C

client

Unregistered / Unconfirmed
GUEST, unregistred user!
请问谁用过Cookie,我用Response.SetCustomHeader('Set-Cookie','UserName='+UserName+'; expires=Sun, 22 Feb 2099 08:08:08 GMT');
后,查看cookie.txt文件内容为
PassWord
asdfgh
xxx.xxx.xxx.xxx/cgi-bin/GUESTBK.exe/
0
3441058816
36600754
2463828576
29108694
*
UserName
张有文
xxx.xxx.xxx.xxx/cgi-bin/GUESTBK.exe/
0
3441058816
36600754
784273216
29108729
*

而且用 UserName := request.CookieFields.Values['UserName'];
Password := request.CookieFields.Values['PassWord'];
却读不出cookie值,why?
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
马上发给你!
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
分配cookie:
procedure TWebModule1.WebModule1LoginActionAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
with Response do
begin
Cookies.Clear;
Cookies.Add;
Cookies[0].Name:='UserName';
Cookies[0].Value:=XXX;
Cookies.Add;
Cookies[1].Name:='Email';
Cookies[1].Value:=XXX;//分配了两个Cookie
end;
end;
读入Cookie:
var UName,UEmail:String;
begin
with Request.QueryFields do
begin
UName:=Values['UserName'];
UEmail:=Values['Email'];//读入
end;
end;
 
C

client

Unregistered / Unconfirmed
GUEST, unregistred user!
还是没得到?似乎没有从cookie.txt中读出来
 
Z

zx

Unregistered / Unconfirmed
GUEST, unregistred user!
使用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;
 
Z

zx

Unregistered / Unconfirmed
GUEST, unregistred user!
还有最好不要在本机上调cookie程序
 

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
对不起:
读入Cookie:
var UName,UEmail:String;
begin
with Request.CookieFields do
begin
UName:=Values['UserName'];
UEmail:=Values['Email'];//读入
end;
end;
这样没问题的,我的论坛就是这样用的
 
C

client

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部 底部