C# 为我的站点上CDN后面的每个URL跟踪唯一页面视图的推荐方法

C# 为我的站点上CDN后面的每个URL跟踪唯一页面视图的推荐方法,c#,html,asp.net-mvc,C#,Html,Asp.net Mvc,我有一个ASP.NET MVC 3站点,它位于Azure CDN和CloudFlare的CDN组合后面。每个页面视图都从SQL server中提取数据,当然,除非CDN缓存了这些数据 我希望能够在我的站点上的每个页面上显示N个页面的浏览量~10k个页面,这样当访问者查看这些页面时,他们就知道它有多受欢迎或不受欢迎。Stackoverflow会在每个问题页面上执行此操作。我不在乎用户是谁,只在乎每页的总数 我想知道最好的方法是什么。我曾想过使用客户端代码,但恶意用户很容易将其弄乱,从而增加页面浏览

我有一个ASP.NET MVC 3站点,它位于Azure CDN和CloudFlare的CDN组合后面。每个页面视图都从SQL server中提取数据,当然,除非CDN缓存了这些数据

我希望能够在我的站点上的每个页面上显示N个页面的浏览量~10k个页面,这样当访问者查看这些页面时,他们就知道它有多受欢迎或不受欢迎。Stackoverflow会在每个问题页面上执行此操作。我不在乎用户是谁,只在乎每页的总数


我想知道最好的方法是什么。我曾想过使用客户端代码,但恶意用户很容易将其弄乱,从而增加页面浏览量。因此,最好的方法似乎是在服务器上实现这一点。我尽了最大努力搜索Stackoverflow的代码示例和推荐方法,但找不到适用于我所要求的内容的内容。

如果我要实现这一点,我可能只是站在现有分析包的顶部。我喜欢使用Google Analytics,它可以跟踪各种很棒的数据,包括页面点击数:

在一小段异步javascript中,我只需使用他们的API即可获得总的页面浏览量:


我知道这很懒惰,但使用他们的代码我能搞糟的事情要少得多:-

以下是我编写的一些示例代码:

优势

不依赖数据库 可定制内存使用 缺点

将根据缓存过期时间+最大队列大小加倍计算唯一视图 示例用法


您需要稍微修改我链接的代码,以使其在您的项目中正常工作,但它应该可以正常工作,不会出现太多问题。

问题在于google analytics已经过时24小时以上。我想显示页面浏览量,以衡量页面的受欢迎程度,特别是因为页面是由用户使用用户生成的内容创建的。因此,他们不断地回来看看他们的内容有多受欢迎,如果是24小时以上的内容,这就有点扼杀了它。如果是这样的话,我只需要从在SQL中注册页面视图的视图中添加一个ajax调用。我不会太担心人们使用这种方法来增加页面数量——他们没有理由不编写脚本来创建一大堆页面点击量。另一个经过深思熟虑的想法——如果你想确定一个页面有多受欢迎,那么向上/向下投票可能是一个更好的模式。
var handler = new UniquePageviewHandler("BlogPost_" + blogPostID);

if(handler.ProcessPageView(visitorIPAddress)){
    // This is a new page view, so process accordingly
    // EG: Increment `unique page views` count in database by 1
}