jobily

摆弄着自己的代码,尽全力可能做到最好!无法样样精通,那么就将某个方面做到极致!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

使用ASP.NET MVC3 实现一个访问统计系统

Posted on   jobily  阅读(5160)  评论(15编辑  收藏  举报

      运营网站,我们经常需要分析用户的行为、用户的习惯,用户看重网站的哪一部分,哪一部分是对用户有用的之类的信息,这些信息从哪里来,这时我们就需要用到访问统计系统了。 网上已经有很多的统计系统,如站长统计、百度统计、谷歌分析之类的,别人的东西始终是别人的,为什么我们不自己实现统计的功能呢,而且自己写的可以实现一些特殊的功能,如登录,下单行为,能够更好的融合自己的系统!

      下面我们就用ASP.NET MVC3来实现一个访问统计系统!首先,使用程序生成一段js代码,包括读写Cookie,及写入一个唯一值到Cookie中,用来判断独立访客者,再写入访问次数及上一个访问页面ID值;然后就是获取客户端时间,分辨率之类的。

 

 

生成之后再去执行下一个Action,用来写入一些统计数据,如客户端IP,浏览器信息,访问页面来源,当前页、访问时间、离开时间等!根据上一个访问页面地址、当前地址及上一个访问页面ID来判断是否是刷新操作还是新的访问页面,如果是刷新操作则写入刷新时间,否则写入上一个页面的离开时间,由于js的跨域问题,

if (assort.Equals(0))
{
    ly = Request.QueryString["Ly"];           //获取来源URL
    currWeb = Request.QueryString["CurrWeb"]; //获取当前URL
}
else
{
    ly = Request.ServerVariables["Http_Referer"];
    currWeb = ly;
}
string firstShow = Request.QueryString["FirstShow"];   //是否第一次访问
string visitTotal = Request.QueryString["VisitTotal"]; //获取浏览次数 
string ip = Helper.Utils.ClientIP();                   //获取客户端IP地址
string strAgent = Request.ServerVariables["HTTP_USER_AGENT"];
bool isAlexa = false;
if (strAgent.IndexOf("alexa") > -1)   //判断是否安装alexa工具栏
    isAlexa = true;
string browerName = Request.Browser.Browser;    //浏览器名称
string browerVersion = Request.Browser.Version; //浏览器版本           
string os = Helper.Utils.GetClientOS();         //客户端操作系统
string langage = Helper.Utils.GetLangage();     //客户端语言
string spider = Helper.Utils.GetSpiderBot();    //搜索引擎爬虫信息
bool isSpider = false;
if (!string.IsNullOrEmpty(spider))
    isSpider = true;
HttpContext.Application.Lock();
            ClickDataAccess clientBasic = new ClickDataAccess();
            //刷新操作  需要根据上一个地址和当前地址 来判断
            if (HttpContext.Application["HBCurrWeb_" + SiteID] != null
                && HttpContext.Application["HBCurrWeb_" + SiteID].ToString().Equals(currWeb)
                && HttpContext.Application["HBLy_" + SiteID] != null
                && HttpContext.Application["HBLy_" + SiteID].ToString().Equals(ly)
                && HttpContext.Application["HBClientId_" + SiteID] != null)
            {
                clientBasic.UpdateForRefresh(HttpContext.Application["HBClientId_" + SiteID]);
                //Helper.Utils.CreateFile("~/Log/", DateTime.Now.ToString("yyyyMMddHHmmssffff") + "_" + SiteID + "刷新.txt", writetext.ToString());
            }
            else
            {
                if (HttpContext.Application["HBClientId_" + SiteID] != null) //如果存在上一个页面的ID值则写入离开时间
                    clientBasic.UpdateForLeaveTime(HttpContext.Application["HBClientId_" + SiteID]);
 
                ClickAndVisitorsDataAccess clientData = new ClickAndVisitorsDataAccess();
                string[] outParam = clientData.Save(client);
                if (!string.IsNullOrEmpty(outParam[0]))
                    HttpContext.Application["HBPublicId_" + SiteID] = outParam[0];
                if (!string.IsNullOrEmpty(outParam[1]))
                {
                    HttpContext.Application["HBClientId_" + SiteID] = outParam[1];
                    javaScript = "WriteCookie('HBClientIDCookie'," + int.Parse(outParam[1]) + ");";
                }
                HttpContext.Application["HBCurrWeb_" + SiteID] = currWeb;
                HttpContext.Application["HBLy_" + SiteID] = ly;
            }
            HttpContext.Application.UnLock();
 
            #endregion

这里使用Application来存储对象,当然也可以使用缓存类来做.

  

暂时没有解决离开当前网站时的离开时间,当然如果访问统计系统的域名和被统计的网站域名是同一个顶级域名,则可以做到这点!

       

      访问统计系统的后台使用存储过程来统计分析数据,暂时只写了一部分功能,访问统计系统也暂时只是一个demo,仅供大家学习参考!

项目源代码:http://download.csdn.net/detail/jobily/3671987

                 http://down.51cto.com/data/263059

还是提供csdn就 51cto的下载地址,其他地址以后再附上,网站数据访问的框架及一些存储过程经过很长的时间积累而成,花了我很多的心思,希望大家不要吝啬自己的那点分,绝对值得你学习,此项目很多类及插入更新的存储过程都是另一个项目自动生成滴,关于自动生成、灵活性及多数据库支持将会在以后文章中公开,敬请期待。 

     

编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
点击右上角即可分享
微信分享提示