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”技术
上一页 [1] [2] [3] [4] [5] 下一页 |