2

我将为文章创建一个查看计数器。我有一些疑问:

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

  2. 我不想每次都更新数据库。我可以在 Dictionary<int, int>(articleId,viewCount)中存储每篇文章被查看的次数。100 次点击后,我可以更新数据库。

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

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

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

4

3 回答 3

3

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

隐藏图像 src 设置为

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

需要【随机码】是因为很多人可能共享同一个IP(例如在一个网络中),并且该码用于区分用户。

于 2010-08-28T19:50:23.720 回答
2
  1. 当然——我认为这是个好主意

  2. 和 3. 是相关的:问题是你将这个字典和逻辑实际存储在哪里。

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

一种可靠的方法是拥有一个单独的 Windows 服务(需要大量编程工作)或始终通过双视图分析存储到数据库(对于这样一个小功能来说,开销相当大)。

您有权访问 IIS 日志吗?如何分析 IIS 日志,例如每 30 分钟使用某种计时器进程并从那里进行计数?或者,然后将所有命中与用户信息一起存储到数据库中,并使用类似的定时过程计算唯一命中。

最后一个问题:你真的确定互联网上成千上万的计数器应用程序/服务都不能满足你的要求吗?

祝你好运!

于 2010-08-28T12:44:02.223 回答
1

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

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

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

PS BTW,为什么这个请求被提出了两次?

替代文字

于 2010-08-28T13:37:20.883 回答