我要为文章创建一个视图计数器。我有一些问题:
我应该忽略文章的作者 当他打开文章?
我不想每次都更新数据库
时间。我可以存放一个
Dictionary<int, int>
(articleId,viewCount)多少次
每篇文章都被查看过。 100后
点击我可以更新数据库。
我应该只计算一次点击次数 每个用户和文章的小时。 (如果 用户打开多篇文章 在一小时内查看计数的时间 应该只增加一次)。
对于每个问题,我想知道您的建议如何正确。
我特别感兴趣的是如何做#3。我应该存储用户在cookie中打开文章的时间吗?这是否意味着我应该为每个页面创建一个新的cookie?
答案 0 :(得分:3)
我想我知道答案 - 他们正在按照Ope的建议分析IIS日志。
隐藏图片src设置为
http://stackoverflow.com/posts/3590653/ivc/[Random code]
[随机代码]是必需的,因为许多人可能共享相同的IP(例如,在网络中),并且代码用于区分用户。
答案 1 :(得分:2)
当然 - 我认为这是一个好主意
和3.是相关的:问题是你实际存储这个字典和逻辑的地方。
ASP.NET应用程序或会话范围当然是最简单的选择,但您确实需要了解应用程序池的逻辑。 ASP.NET应用程序不时被回收:当网站上某段时间或特殊情况下没有任何动作时 - 例如如果进程开始占用太多内存,应用程序将关闭,并在下一个请求中启动一个新应用程序。有会话和应用程序关闭的事件,但至少几年前他们并不真正可靠:在许多特殊情况下,他们并不总是开火。也许他们现在好些了,但测试很痛苦。 1小时真的很长一段时间:通常会话只在最后一次请求后20分钟保持活动状态。
一种可靠的方法是拥有一个单独的Windows服务(需要编程的大量工作)或始终使用双视图分析存储到数据库(这么小的功能需要很多开销)。
您是否可以访问IIS日志?如何分析IIS日志,例如每30分钟进行一次计时器处理并从中获取计数?或者然后使用用户信息将所有匹配存储到数据库,并使用类似的定时过程计算唯一命中。
最后一个问题:您是否确定互联网上数以千计的计数器应用程序/服务都不能满足您的要求?
祝你好运!答案 2 :(得分:1)
这是Firebug中此页面的屏幕截图。您可以看到有一个请求返回204状态代码(无内容)。
这是stackoverflow的视图计数器。他们使用隐藏的图像指向控制器的动作。
我有很多文章。如何跟踪用户访问过哪些文章?
P.S。顺便说一句,为什么这个请求被提出两次?