如何用ASP.NET MVC 3实现一个访问统计系统
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇文章为大家展示了如何用ASP.NET MVC 3实现一个访问统计系统,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。运营网站,我们经常需要分析用户的行为、用
千家信息网最后更新 2025年11月07日如何用ASP.NET MVC 3实现一个访问统计系统
本篇文章为大家展示了如何用ASP.NET MVC 3实现一个访问统计系统,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
运营网站,我们经常需要分析用户的行为、用户的习惯,用户看重网站的哪一部分,哪一部分是对用户有用的之类的信息,这些信息从哪里来,这时我们就需要用到访问统计系统了。 网上已经有很多的统计系统,如站长统计、百度统计、谷歌分析之类的,别人的东西始终是别人的,为什么我们不自己实现统计的功能呢,而且自己写的可以实现一些特殊的功能,如登录,下单行为,能够更好的融合自己的系统!
下面我们就用ASP.NET MVC 3来实现一个访问统计系统!首先,使用程序生成一段js代码,包括读写Cookie,及写入一个唯一值到Cookie中,用来判断独立访客者,再写入访问次数及上一个访问页面ID值;然后就是获取客户端时间,分辨率之类的。
string guid = Guid.NewGuid().ToString(); #region 生成js html.Append("function WriteCookie(cookieName, cookieValue, expiry) {"); //js写cookie html.Append(" var expDate = new Date();"); html.Append(" if (expiry) {"); html.Append(" expDate.setTime(expDate.getTime() + expiry);"); html.Append(" [xss_clean] = cookieName + \"=\" + escape(cookieValue) + \"; path=/;expires=\" + expDate.toGMTString();"); html.Append(" }"); html.Append(" else {"); html.Append(" [xss_clean] = cookieName + \"=\" + escape(cookieValue) + \"; path=/;\""); html.Append(" }"); html.Append("}"); html.Append("function ReadCookie(name) {"); //js读取cookie html.Append(" var cookieValue = \"\";"); html.Append(" var search = name + \"=\";"); html.Append(" if ([xss_clean].length >0) {"); html.Append(" offset = [xss_clean].indexOf(search);"); html.Append(" if (offset != -1) {"); html.Append(" offset += search.length;"); html.Append(" end = [xss_clean].indexOf(\";\", offset);"); html.Append(" if (end == -1)"); html.Append(" end = [xss_clean].length;"); html.Append(" cookieValue = unescape([xss_clean].substring(offset, end))"); html.Append(" }"); html.Append(" }"); html.Append(" return cookieValue;"); html.Append("}"); html.Append("DateFormatString = function(datetime, format) {"); html.Append(" var year = datetime.getFullYear();"); html.Append(" var month = datetime.getMonth()+1;"); html.Append(" var date = datetime.getDate();"); html.Append(" var hour = datetime.getHours();"); html.Append(" var minutes = datetime.getMinutes();"); html.Append(" var second = datetime.getSeconds();"); html.Append(" format = format.replace(/YY/g, year).replace(/MM/g, month).replace(/DD/g, date).replace(/hh/g, hour).replace(/mm/g, minutes).replace(/ss/g, second);"); html.Append(" return format;"); html.AppendLine("}"); html.Append("var cookieEnabled = (navigator.cookieEnabled) ? true : false;"); //判断浏览器是否支持cookie html.Append("if (typeof navigator.cookieEnabled == \"undefined\" &&!cookieEnabled) {"); html.Append(" [xss_clean] = \"testcookie\";"); html.Append(" cookieEnabled = ([xss_clean] == \"testcookie\") ? true : false;"); html.Append(" [xss_clean] = \"\";"); html.Append("}"); html.Append("var firstshow;"); html.Append("var visittotal;"); html.Append("var isLogin;"); html.Append("var loginName;"); html.Append("if (cookieEnabled == true) {"); html.Append(" var HBCountShowCookie = ReadCookie(\"HBCountShowCookie\");"); //访客浏览器唯一ID html.Append(" var HBCountVisitTotalCookie = ReadCookie(\"HBCountVisitTotalCookie\");"); //访客浏览次数 html.Append(" var HBClientIDCookie = ReadCookie(\"HBClientIDCookie\");"); //访客上一个点击页面ID html.Append(" var HBLoginNameCookie = ReadCookie(\"HBLoginNameCookie\");"); //记录登录的用户名 html.Append(" if (HBCountShowCookie == \"\") {"); html.Append(" sparetime = 1000 * 60 * 60 * 24 * 3650;"); //有效期为一年 html.Append(" WriteCookie('HBCountShowCookie', \"" + guid + "\", sparetime);"); html.Append(" HBCountShowCookie = ReadCookie(\"HBCountShowCookie\");"); html.Append(" firstshow = 1;"); html.Append(" }"); html.Append(" else {"); html.Append(" firstshow = 0;"); html.Append(" }"); html.Append(" if (HBCountVisitTotalCookie == \"\") {"); //游客统计 html.Append(" sparetime = 1000 * 60 * 60 * 24 * 3650;"); html.Append(" WriteCookie('HBCountVisitTotalCookie', 1, sparetime);"); html.Append(" visittotal = 1;"); html.Append(" }"); html.Append(" else {"); html.Append(" if (firstshow == 1) {"); html.Append(" visittotal = parseInt(HBCountVisitTotalCookie) + 1;"); html.Append(" sparetime = 1000 * 60 * 60 * 24 * 3650;"); html.Append(" WriteCookie('HBCountVisitTotalCookie', visittotal, sparetime);"); html.Append(" }"); html.Append(" else {"); html.Append(" visittotal = parseInt(HBCountVisitTotalCookie);"); html.Append(" }"); html.Append(" }"); html.Append(" try {"); html.Append(" if (HBStat != undefined || HBStat.isLogin != undefined || HBStat.loginName != undefined) {"); //此为登录用户统计 html.Append(" if (HBStat.isLogin == 1 &&HBStat.loginName != \"\") {"); html.Append(" sparetime = 1000 * 60 * 60 * 24 * 120;"); html.Append(" WriteCookie('HBLoginNameCookie', HBStat.loginName, sparetime);"); html.Append(" HBLoginNameCookie = ReadCookie(\"HBLoginNameCookie\");"); html.Append(" }"); html.Append(" isLogin=HBStat.isLogin;"); html.Append(" }"); html.Append(" else{isLogin=0;}"); html.Append(" }"); html.Append(" catch (e) { isLogin=0; }"); html.Append(" loginName=HBLoginNameCookie;"); html.Append("} else {"); //不支持cookie html.Append(" firstshow = 0;"); html.Append(" visittotal = 1;"); html.Append(" var HBCountShowCookie = \"\";"); html.Append(" isLogin=0;"); html.Append(" loginName=\"\";"); html.Append("}"); html.Append("var ly = escape(document.referrer);"); html.Append("var currweb = escape(location.href);"); html.Append("var d = new Date();"); html.Append("var currdate=DateFormatString(d,'YY-MM-DD hh:mm:ss');"); html.Append("var screenwidth=screen.width;"); html.Append("var screenheight=screen.height;"); html.Append("var screencolordepth=screen.colorDepth;"); html.Append("[xss_clean]('');"); #endregion生成之后再去执行下一个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来存储对象,当然也可以使用缓存类来做.
暂时没有解决离开当前网站时的离开时间,当然如果访问统计系统的域名和被统计的网站域名是同一个顶级域名,则可以做到这点!
上述内容就是如何用ASP.NET MVC 3实现一个访问统计系统,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
统计
系统
页面
时间
浏览
用户
地址
客户
客户端
浏览器
信息
网站
访客
域名
次数
生成
登录
内容
功能
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库最早日期
多媒体数据库技术ppt
我国网络安全管理的最高机构是
提取网页中多张表格数据库
连接数据库查询语句c
云服务器怎样添加安全组规则
网络安全等保公司
数据库有几种锁
如何评价一个数据库
志强服务器进bios
查看服务器公网ip
校园网络安全网络拓扑机构
谈一下你对网络安全这门课的看法
中科软件开发北京公司
idea搭建git服务器
服务器php模块是什么
smc数据库是哪个国家的软件
辅警网络安全保密自查自纠
珠海 软件开发工程师
软件开发人员数量
软件开发合同协议书范本文库
用dw做网页怎么做数据库
学习电脑和网络技术的视频
交通警察是不是能查个人数据库
家庭nas服务器推荐
数据库升级数据拷贝
ce软件开发
数据库商品中心设计
沈逸网络安全和信息化
服务器自动化管理系统