用ASP统计用户在站点的停留时间(1)
发表于:2007-06-30来源:作者:点击数:
标签:
虽然通常使用的点击注册技术可以计算出你的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 a
clearcase/" target="_blank" >ccount
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).
如果用户访问的时间少于1分钟(比如说,他们的session开始后过了1分钟还没能装载另一页),用我们的代码就不显示在列表中。从整个session长度中减去这个session的timeout ,就会得到0,在这一点我们的代码就将其舍弃:
If intMinutes > 0 Then ?
当然你可以修改代码以适应自己的需要。
注意:要记住session结束后才开始写日志文件的条目。你不能立刻看到它们。如果想试着更快地看到结果,可以在页面上修改Session.Timeout 的属性。
在数据库中记录结果
要将计算的结果记录数据库中而不是日志文件中,可以创建一个适当的SQL INSERT声明,执行它来更新一个你已经提供的数据库表:
...
strSQL = "INSERT INTO YourTable (UserName, SessionEnd, " _
& "SessionLength) VALUES (@#" & strUserName & " @#, #" _
& datEndTime & "#, " & intMinutes & ")"
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.open "DSN=yourdsn;UID=username;PWD=password;"
oConn.Execute strSQL
Set oConn = Nothing
...
原文转自:http://www.ltesting.net