用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 aclearcase/" 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