用ASP统计用户在站点的停留时间

2008-02-23 05:31:37来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

虽然通常使用的点击注册技术能够计算出您的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).

  假如用户访问的时间少于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

...

  然后您就能够用任何方式来使用这些数据了。您能够创建ASP页面来读取数据并将数据呈现给管理员,或从数据库中将其复制到一个电子工作表中,有时间的时候再进行分析。

  但是要记住,使用ASP sessions会带来一些问题。在ASP 2.0中,当主应用程式目录下的嵌套目录中有global.asa 的副本时,有时sessions 会丢失。更有,假如您在URL、页面文档名连同页面之间的终极链接中使用字母的大小写不同的话,象Navigator那样的浏览器就把URL作为大小写敏感来对待,因此不把特别的ASP session cookie发送回来,这样这种方法的使用也是不可靠的。

  

“客户机端Cookie”技术
  使用客户机端Cookie也很容易。完成这一工作的代码能够放在一个ASP #include 文档中,然后将他插入到站点中用户肯定会去访问的主页面中。当然,假如愿意的话能够将其插入任何的页面。只要在用户访问的过程中他工作正常,就能给出正确的结果。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 用ASP实现Web表单的数据保持(一)

下一篇: ASP中页面限权访问的几种方法