【问题标题】:View counter in ASP.NET MVC在 ASP.NET MVC 中查看计数器
【发布时间】:2010-08-28 11:55:01
【问题描述】:

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

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

  2. 我不想每个都更新数据库 时间。我可以存储在 Dictionary<int, int> (articleId, viewCount) 多少次 每篇文章都被浏览了。 100后 点击我可以更新数据库。

  3. 我应该只计算一次命中 每个用户和文章的小时。 (如果 用户打开一篇文章很多 一小时内的浏览次数 应该只增加一次)。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    隐藏图片src设置为

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

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

    【讨论】:

    • 我可能会使用相同的方法。
    • 我知道这已经有一段时间了,但你有没有弄清楚这个 [随机代码] 的用途是什么?我今天就这个话题提出了一个新问题:stackoverflow.com/questions/5633942/…。也许您可以在那里分享您的见解?
    【解决方案2】:
    1. 当然 - 我认为这是个好主意

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

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

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

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

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

    祝你好运!

    【讨论】:

    • 我忘了提到 - 字典将存储在静态属性中。不,我无权访问 IIS 日志。我想要一个类似 StackOverflow 的视图计数器。
    【解决方案3】:

    这是此页面在 Firebug 中的屏幕截图。可以看到有一个请求返回204状态码(No Content)。

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

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

    附:顺便说一句,为什么这个请求被提出了两次?

    【讨论】:

    • 你确定?我认为当您输入问题的详细信息时,SO 会更新查看计数器,例如此页面。
    • 是的,这种图像只出现在需要查看次数的页面上。
    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多