用ASP统计用户在站点的停留时间(1)
程序员文章站
2024-01-30 08:03:28
虽然通常使用的点击注册技术可以计算出你的web站点得到多少点击,但是,如果能够知道访问者在站点上停留了多长时间就更好了。如果有上千人点击并打开了你的主页,但他们却在漂亮的“欢迎”图...
虽然通常使用的点击注册技术可以计算出你的web站点得到多少点击,但是,如果能够知道访问者在站点上停留了多长时间就更好了。如果有上千人点击并打开了你的主页,但他们却在漂亮的“欢迎”图形完全下载之前就已经跑到别的站点
去了,这样,你所花在建设和维护站点上的投资就没有得到很好的回报。
有两种很好的方法用来记录用户在你的站点上花费了多少时间。第一个是使用基于asp服务器的sessions,第二是通过保持客户机端cookies。要记住,使用sessions将给服务器的处理工作增加负荷,但是它们确实提供了最简洁的方法。还有一点要注意,那就是如果用户端的不能支持cookie功能,那么这两种方法都不能工作。
asp session 技术
使用asp session 是要求你把这个session 开始的当前时间保存成那个用户的session 级别变量,这将要用到你的站点或虚拟路径下的global.asa 文件中的session_onstart 事件句柄。然后,在session_onend 事件句柄中,你就可以计算出session 持续的时间,并将这个结果写到日志文件或中。在这里的例子中使用了日志文件:
< script language="vbscript" runat="server" >
sub session_onstart()
save the time that the session started
session("starttime") = now()
end sub
sub session_onend()
get the time that the user last loaded a page
assumes the default session timeout of 20 minutes
on error resume next
set path and name of log file to be created
edit to suit your own machine directory layout
remember to give the directory write or full
control permission for the iusr_machine account
strfilename = "c:tempvisit_lengths.txt"
datstarttime = session("starttime")
datendtime = dateadd("n", -20 , now())
intminutes = datediff("n", datstarttime, datendtime)
if intminutes > 0 then
got a valid time so add it to the log file
strinfo = "visit ending at " & datendtime _
& " lasted for " & intminutes & " minute(s)."
add user name to the log entry string here if required
strinfo = strinfo & " user name: " & strusername
set objfileobject = server.createobject("scripting.filesystemobject")
open text file to append data (the forappending constant = 8)
set objfile = objfileobject.opentextfile(strfilename, 8, true)
objfile.writeline strinfo
objfile.close
end if
end sub
< /script >
你可以看到,当session 结束时,我们从当前时间中减去了session 的timeout的数值,如果考虑到用户装载最后一页时所花费的时间,减去的值可以稍微小一点。这个数量由你去猜,因为用这个技术并不能测出实际值。
注意,如果你在任何页面中使用了asp的 session.abandon 方法,就不能得到正确的结果。因为这种方法立即中断session,这样,从实际时间中减去session长度就会给出一个不正确的访问时间(有时候甚至是负数)。更糟糕的是,在asp 2.0版本中,这种方法还经常彻底不能启动session_onend事件。
在某些站点上使用一种“中止服务器操作”的链接来启动session.abandon方法,但是根据经验,很少有用户会去点击它。他们只是转到另一个站点,让session自行中断。
这是我们从日志文件中得到的一些记录:
visit ending at 6/5/00 1:05:26 am lasted for 2 minute (s).
visit ending at 6/5/00 1:06:14 am lasted for 47 minute(s).
visit ending at 6/5/00 1:12:18 am lasted for 22 minute(s).
visit ending at 6/5/00 1:29:54 am lasted for 9 minute(s).
去了,这样,你所花在建设和维护站点上的投资就没有得到很好的回报。
有两种很好的方法用来记录用户在你的站点上花费了多少时间。第一个是使用基于asp服务器的sessions,第二是通过保持客户机端cookies。要记住,使用sessions将给服务器的处理工作增加负荷,但是它们确实提供了最简洁的方法。还有一点要注意,那就是如果用户端的不能支持cookie功能,那么这两种方法都不能工作。
asp session 技术
使用asp session 是要求你把这个session 开始的当前时间保存成那个用户的session 级别变量,这将要用到你的站点或虚拟路径下的global.asa 文件中的session_onstart 事件句柄。然后,在session_onend 事件句柄中,你就可以计算出session 持续的时间,并将这个结果写到日志文件或中。在这里的例子中使用了日志文件:
< script language="vbscript" runat="server" >
sub session_onstart()
save the time that the session started
session("starttime") = now()
end sub
sub session_onend()
get the time that the user last loaded a page
assumes the default session timeout of 20 minutes
on error resume next
set path and name of log file to be created
edit to suit your own machine directory layout
remember to give the directory write or full
control permission for the iusr_machine account
strfilename = "c:tempvisit_lengths.txt"
datstarttime = session("starttime")
datendtime = dateadd("n", -20 , now())
intminutes = datediff("n", datstarttime, datendtime)
if intminutes > 0 then
got a valid time so add it to the log file
strinfo = "visit ending at " & datendtime _
& " lasted for " & intminutes & " minute(s)."
add user name to the log entry string here if required
strinfo = strinfo & " user name: " & strusername
set objfileobject = server.createobject("scripting.filesystemobject")
open text file to append data (the forappending constant = 8)
set objfile = objfileobject.opentextfile(strfilename, 8, true)
objfile.writeline strinfo
objfile.close
end if
end sub
< /script >
你可以看到,当session 结束时,我们从当前时间中减去了session 的timeout的数值,如果考虑到用户装载最后一页时所花费的时间,减去的值可以稍微小一点。这个数量由你去猜,因为用这个技术并不能测出实际值。
注意,如果你在任何页面中使用了asp的 session.abandon 方法,就不能得到正确的结果。因为这种方法立即中断session,这样,从实际时间中减去session长度就会给出一个不正确的访问时间(有时候甚至是负数)。更糟糕的是,在asp 2.0版本中,这种方法还经常彻底不能启动session_onend事件。
在某些站点上使用一种“中止服务器操作”的链接来启动session.abandon方法,但是根据经验,很少有用户会去点击它。他们只是转到另一个站点,让session自行中断。
这是我们从日志文件中得到的一些记录:
visit ending at 6/5/00 1:05:26 am lasted for 2 minute (s).
visit ending at 6/5/00 1:06:14 am lasted for 47 minute(s).
visit ending at 6/5/00 1:12:18 am lasted for 22 minute(s).
visit ending at 6/5/00 1:29:54 am lasted for 9 minute(s).