MVC中如何统计一个网站的访问次数和在线人数

How to count the number of times a website is visited and the number of online users in MVC

我需要了解某个网站的访问次数和在线用户数。

我的代码是这样的:

Global.asax

 protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);


        // Code that runs on application startup
        Application["SiteVisitedCounter"] = 0;
        //to check how many users have currently opened our site write the following line
        Application["OnlineUserCounter"] = 0;
    }

    void Session_Start(object sender, EventArgs e)
    {
        // Code that runs when a new session is started
        Application.Lock();
        Application["SiteVisitedCounter"] = Convert.ToInt32(Application["SiteVisitedCounter"]) + 1;
        //to check how many users have currently opened our site write the following line
        Application["OnlineUserCounter"] = Convert.ToInt32(Application["OnlineUserCounter"]) + 1;
        Application.UnLock();
    }

    void Session_End(object sender, EventArgs e)
    {
        // Code that runs when a session ends.
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer
        // or SQLServer, the event is not raised.
        Application.Lock();
        Application["OnlineUserCounter"] = Convert.ToInt32(Application["OnlineUserCounter"]) - 1;
        Application.UnLock();
    }

HomeController class 包含以下代码。 我在 System.Net.Mime.MediaTypeNames.Application.

上遇到错误
   [HttpGet]
   public ActionResult Index()
    {
        ViewBag.noofsitesvisited = "No of times site visited=" + System.Net.Mime.MediaTypeNames.Application["SiteVisitedCounter"].ToString();
        ViewBag.onlineusers = "No of users online on the site=" + System.Net.Mime.MediaTypeNames.Application["OnlineUserCounter"].ToString();
    }

您需要修改控制器中的代码如下:

   [HttpGet]
    public ActionResult Index()
    {
        ViewBag.noofsitesvisited = "No of times site visited=" + HttpContext.Application["SiteVisitedCounter"].ToString();
        ViewBag.onlineusers = "No of users online on the site=" + HttpContext.Application["OnlineUserCounter"].ToString();
    }

在 MVC 应用程序中变量可以通过 HttpContext 访问

你不想这样做。第一,从一开始就在 Web 环境中从任何全局读取和写入数据都是危险且不可取的,第二,这只会在 AppPool 处于活动状态时存储计数。如果服务器重新启动或 AppPool 重新启动,甚至只是回收,您的计数都会消失,您将从零开始。

如果你想存储一个需要持久化的计数,那么你需要使用持久化介质:数据库、文本文件等。这不仅通常更安全,而且也是唯一的方法真正的持久计数。

就是说,为什么不直接使用 Google 分析或其他形式的网站分析。您不仅是在重新发明轮子,而且实际的分析跟踪将比您自己做的任何事情都更加准确并提供更有用的统计数据。