连接计时、点击计数(300分)

  • 主题发起人 主题发起人 delphiwolf
  • 开始时间 开始时间
D

delphiwolf

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟以前一直做C/S模式的数据库应用,没有做过Internet方面的应用。
公司让我做一个广告网方面的东西,可以进行计时和计数,我感觉无从
下手,急切盼望有经验的高手给予指点。
email: noctwolf@990.net
 
用asp做比较方便,当然用Delphi做CGI也可。
 
我一点头绪都没有,比如开发工具、操作系统、数据库。。。。
 
计时不太可能,因为http连接不是持续连接.
计数还可以做到.
 
计时应该是不可能的,除非采用登录的方式,但是很难保证人家是以logout
方式退出你的网站.
最关键问题是, 如果想通过这种计时来进行网络研究,
那不可能得出令人信服的结论,骗骗人还可以.
我看过很多国外关于网络应用研究的论文, 没见过在www的Server端
计时的. 很款的项目,通常都是在客户端进行计时 (特殊浏览器,或者
采用hook之类).
 
你可以用delphi的web组件去写CGI吧。那样你就可以先把计数器写好的。
计数器还不是很难。但是计时器我就不清楚。好象delphi不太好写的。
我不会写计时器。呵呵,放在服务器端?
 
server端的计时器是根本不可能的,因为http协议本身就不是一个持续的连接,
一旦得到数据之后就断开连接,无法计时,在浏览器端还有可能.
 
DELPHI编写CGI一流棒,你也可以写成isapi,这样效率更高一些,计时可能是比较麻烦,你用弹出式的Java程序试一试看呀
 
大家能否给点资料,多多益善!
 
急!!!随后再奉送500分!
 
What is 计时?
如果我开着你的网站的时候正在看别的网站,
或者我用Webzip下载你的网站,又该做何解释?
还是告诉你的老板,谁出的主意让谁做去吧。:)
而且大多数广告网一般都是计显示次数或点击次
数,还从来没听说过有这样罕见的计算方式。
 
请问各位高手,服务器端要什么?工作站(开发用)要什么?
这可是我第一次提问,望各位高手赐教!!!


 
服务器端要装服务器软件
NT下:IIS
98下:PWS

 
大家多来点呀!!!
不要让我失望呦!!!
 
工作站就和平时编程序没什么2样,既然是这么简单的程序,你用delphi做好之后
拷贝到server上面就可以了.

不过为了调试方便,最好还是装个PWS.
 
一个计数器的程序。计时不可能实。
使用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;

(以上程序用Win95B的个人Web服务器+Netscape Navigator 4.04调试通过)

 
可以通过server端的log记录粗略估计访问时间。
 
感谢阿蒙,能给发个例子吗?
盼望!
 
我会试一试
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部