2010-11-12 88 views
0

对于我的一个课程,我们需要计算访问网站的用户的会话长度。我们被给了一个网络日志。该网络日志的格式如下:确定网站的会话时间

IPAddress date httpMethod httpStatus size referrer browserInfo 
  • httpMethod看起来是这样的:GET /include/main_page.css HTTP/1.1
  • 引用者总是主页:http://www.cs.myCollage.com-

我使用的超时值20分钟。

问题: 我不知道如何判断会话何时结束,而不是超时。超时结束会话的唯一方法是什么?有没有办法检测用户何时离开站点(仅使用日志中的信息)?


这是我目前的战略(假设我们有这些日志):

IPAddress Time httpMethod ... 
IP1   2:15 GET something 
IP1   2:17 GET something else 
IP1   2:30 GET something else 
IP1   4:30 GET something else 
IP1   4:32 GET something else 

这意味着用户有过两次会议。我认为第一场会议是或者 15分钟 35分钟。我应该在会话时间中包含超时吗?

第二次会议将在2分钟到22分钟之间。

+0

这个问题与算法有关,但与其他标签只有短暂的关系。如果你只给了它'算法'标签,你可能会有更多的意见。标签“解析”更多的是这个问题的精神,而不是“网络”或“网络开发”。 – Dialecticus 2010-11-13 00:43:33

回答

1

超时值用于分隔来自同一IP(不一定是同一个人)的不同会话。在你的例子中,你有两个不同的会话,因为从2:30到4:30的时间大于超时值。

至于确定会话长度,这可能是一个简单的课堂作业解决方案,可能是老师想到的:只需从结束时间减去开始时间。在你的情况下,第一场会议需要15分钟,第二场会议需要2分钟。

如果这将是一个真实世界的项目,那么也许每个会话的最后一页也应给予一定的价值。为此,您可以使用时间局部性方法:

最后一次GET的持续时间可以通过其之前的所有页面的平均持续时间进行估计。在你的例子中(2:15,2:17,2:30),前两页持续了15分钟,所以估计访问者有点慢和/或彻底,第三页持续了7.5分钟,会话总数是22.5分钟。从(4:30,4:32)我们推断,最后一页持续2分钟,会话总数为4分钟。在特殊情况下,我们只有一次页面访问,您必须持续一段时间的任意值,例如1分钟。

另一种方法是为每个页面添加一个值。某些页面比其他页面需要更多时间阅读。这意味着您必须阅读整个日志并确定每个页面处于中间会话时的平均访问时间,并将此时间用于页面最后一次会话时的情况。这更复杂,可能不是您的作业问题的答案。

最好的现实世界的解决方案可能是这两种方法的组合。