在ASP.NET MVC中查看计数器

时间:2010-08-28 11:55:02

标签: asp.net-mvc cookies visitor-statistic

我要为文章创建一个视图计数器。我有一些问题:

  1. 我应该忽略文章的作者 当他打开文章?

  2. 我不想每次都更新数据库 时间。我可以存放一个 Dictionary<int, int>(articleId,viewCount)多少次 每篇文章都被查看过。 100后 点击我可以更新数据库。

  3. 我应该只计算一次点击次数 每个用户和文章的小时。 (如果 用户打开多篇文章 在一小时内查看计数的时间 应该只增加一次)。

  4. 对于每个问题,我想知道您的建议如何正确。

    我特别感兴趣的是如何做#3。我应该存储用户在cookie中打开文章的时间吗?这是否意味着我应该为每个页面创建一个新的cookie?

3 个答案:

答案 0 :(得分:3)

我想我知道答案 - 他们正在按照Ope的建议分析IIS日志。

隐藏图片src设置为

http://stackoverflow.com/posts/3590653/ivc/[Random code]

[随机代码]是必需的,因为许多人可能共享相同的IP(例如,在网络中),并且代码用于区分用户。

答案 1 :(得分:2)

  1. 当然 - 我认为这是一个好主意

  2. 和3.是相关的:问题是你实际存储这个字典和逻辑的地方。

  3. ASP.NET应用程序或会话范围当然是最简单的选择,但您确实需要了解应用程序池的逻辑。 ASP.NET应用程序不时被回收:当网站上某段时间或特殊情况下没有任何动作时 - 例如如果进程开始占用太多内存,应用程序将关闭,并在下一个请求中启动一个新应用程序。有会话和应用程序关闭的事件,但至少几年前他们并不真正可靠:在许多特殊情况下,他们并不总是开火。也许他们现在好些了,但测试很痛苦。 1小时真的很长一段时间:通常会话只在最后一次请求后20分钟保持活动状态。

    一种可靠的方法是拥有一个单独的Windows服务(需要编程的大量工作)或始终使用双视图分析存储到数据库(这么小的功能需要很多开销)。

    您是否可以访问IIS日志?如何分析IIS日志,例如每30分钟进行一次计时器处理并从中获取计数?或者然后使用用户信息将所有匹配存储到数据库,并使用类似的定时过程计算唯一命中。

    最后一个问题:您是否确定互联网上数以千计的计数器应用程序/服务都不能满足您的要求?

    祝你好运!

答案 2 :(得分:1)

这是Firebug中此页面的屏幕截图。您可以看到有一个请求返回204状态代码(无内容)。

这是stackoverflow的视图计数器。他们使用隐藏的图像指向控制器的动作。

我有很多文章。如何跟踪用户访问过哪些文章?

P.S。顺便说一句,为什么这个请求被提出两次?

alt text