对于我的一门类(class),我们需要计算用户访问网站的 session 时长。我们得到了一个网络日志。网络日志的格式如下:
IPAddress date httpMethod httpStatus size referrer browserInfo
httpMethod
如下所示:GET/include/main_page.css HTTP/1.1
- 引荐来源始终是主页:
http://www.cs.myCollage.com
或-
我使用的超时值为 20 分钟。
问题: 除了超时之外,我不确定如何判断 session 何时结束。是用超时结束 session 的唯一方法吗?有没有办法检测用户何时离开网站(仅使用日志中的信息)?
这是我目前的策略(假设我们有这些日志):
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
这意味着用户有两个 session 。我认为第一节课要么 15 分钟要么 35 分钟。我应该在 session 时间中包括超时吗?
第二个 session 将在 2 分钟到 22 分钟之间。
最佳答案
超时值用于分隔来自同一 IP(不一定是同一个人)的不同 session 。在您的示例中,您有两个不同的 session ,因为从 2:30 到 4:30 的时间段大于超时值。
至于确定课时长度,这可能是类作业的直接解决方案,也可能是老师的想法:只需从结束时间中减去开始时间。在您的情况下,第一节课 15 分钟,第二节课 2 分钟。
如果这是一个真实世界的项目,那么也许每个 session 的最后一页也应该被赋予一些值(value)。为此,您可以使用时间局部性方法:
最后一个 GET 的持续时间可以通过它之前的所有页面的平均持续时间来估计。在您的示例 (2:15,2:17,2:30) 中,前两页持续了 15 分钟,因此估计访问者有点慢和/或彻底,第三页持续了 7.5 分钟, session 总数为 22.5分钟。从 (4:30,4:32) 我们推断最后一页持续了 2 分钟, session 总时长为 4 分钟。在我们只有一个页面访问的特殊情况下,您必须为持续时间指定一些任意值,例如 1 分钟。
另一种方法是为每个页面赋予一个值。有些页面比其他页面需要更多时间阅读。这意味着您必须阅读整个日志并确定每个页面在 session 中期时的平均访问时间,并将此时间用于页面最后一次 session 的情况。这更复杂,可能无法回答您的家庭作业问题。
现实世界中最好的解决方案可能是这两种方法的结合。
关于algorithm - 确定网站的 session 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4169936/