,,ASP.net中网站访问量统计方法代码

,,ASP.net中网站访问量统计方法代码

本文介绍了ASP.net网站访问量的统计方法代码,有需要的朋友可以参考一下。

一、建立一个数据表IPStat用于存放用户信息

存储在IPStat表中的用户信息仅包括已登录用户的IP(IP_Address)、IP源(IP_Src)和登录时间(IP_DateTime)。这些表的信息我只保存一天,要统计每个月的信息需要保存一个月。因为不太懂数据日志的操作,所以创建了这个表,说我傻吧,哈哈。

二、在Global.asax中获取用户信息

在Global.asax的Session_Start获取相关信息,也就是新会话开始的时候。同时,实现在线人数和此处访客总数的增量统计。代码如下:

复制代码如下:void session _ start (object sender,eventargs e){//获取访问者的IP字符串IP address=request . server variables[' remote _ addr '];//获取访问者的源字符串ipSrc//if(request . URL referrer==null){ IP src=' ',以确定您是否已从搜索引擎导航;}else{//Get源地址IP src=request . URL referrer . tostring();}//获取访问时间datetime IP datetime=datetime . now;//将IP信息保存到数据库,IPControl cont=new IPControl();内容AddIP(ipAddress,ipSrc,IP datetime);

//获取用户字符串pageurl=request.url.tostring()访问的页面;//确定是否访问默认页面if(pageurl . ends with(' ipstat . aspx '){//锁定变量Application。lock();//对于页面访问1 application[' statcount ']=int . parse(application[' statcount '])。tostring())1;//解锁应用程序。UnLock();}

//锁定变量会话。超时=10;//将超时设置为10分钟应用程序。lock();application[' count session ']=Convert。ToInt32(应用程序[' count session '])1;//访客总数+1应用['online wh x']=(int)应用[' online wh x ']1;//在线人数加+1 session[' log in _ name ']=null;//解锁应用程序。UnLock();}

提醒一句,别忘了下面的代码,以实现在用户离线时,将在线人数减去1.

复制代码如下:void session _ end(对象发送方,eventargs e){//会话结束时运行的代码。//注意:只有当Web.config文件中的sessionstate模式设置为InProc时,才会引发Session_End事件。如果会话模式设置为StateServer //或SQLServer,则不会引发此事件。

//锁定变量应用程序。lock();Application[' online whx ']=(int)Application[' online whx ']-1;//在线人数减少-1 session[' log in _ name ']=null;//解锁应用程序。UnLock();}

三、将以上有关信息保存到数据库IPStat

创建一个IPControl()类来获取IP数据信息,用来操作数据库IPStat的数据。IPControl()类的内容,因为是C#中对数据库的操作,可以理解为理解Sql server数据库,这里就不介绍了。请点击此链接查看。

要将用户IP信息保存到数据库中,请在上面的代码中调用IPControl()。

如下复制代码://将IP信息保存到数据库中。IPControl cont=new IPControl();内容AddIP(ipAddress,ipSrc,IP datetime);

参数ipAddress是用户IP,ipSrc是用户源,ipDatetime是用户进入时间。

四、创建定时器,定时操作有关数据

对于上述IPSta数据库的数据,需要创建一个或几个定时器,在每晚24: 00前统计每天10秒内的流量,然后删除,将统计结果保存到另一个数据表中,供页面显示昨天的流量被调用。请点击创建一个或多个计时器供您参考。

以上不足之处,请批评指正。谢谢你

在ASP.net中网站访问量统计方法—获取IP数据信息的类

复制代码如下:使用System使用系统。数据;使用系统。Data . SqlClient使用系统。文本;

//////获取互联网协议(互联网协议)数据信息的类///公共类IPControl{//常量用来表示T-SQL语句中用到的变量名称私有常量字符串PARM知识产权地址=' @地址;私有常量字符串PARM _ IP _ SRC=' @ IPSrc ';私有常量字符串PARM _ IP _日期时间=' @日期时间;//T-SQL语句private const string SQL _ INSERT _ IPSTAT=' INSERT INTO IPSTAT VALUES(@ IP address,@IPSrc,@ IPDateTime)';private const string SQL _ DELETE _ IPSTAT=' DELETE from IPSTAT WHERE DATEDIFF(d,ip_datetime,getdate())30 ';//只保留一个月的数据私有常量字符串SQL _ SELECT _ TOTAL=' SELECT COUNT(*)FROM IPStat ';private const string SQL _ SELECT _ TODAY=' SELECT COUNT(*)FROM IPStat WHERE DATEDIFF(d,ip_datetime,getdate())=0 ';private const string SQL _ SELECT _ YESTERDAY=' SELECT COUNT(*)FROM IPStat WHERE DATEDIFF(d,ip_datetime,getdate())=1 ';private const string SQL _ SELECT _ MONTH=' SELECT COUNT(*)FROM IPStat WHERE DATEDIFF(d,ip_datetime,getdate())30 and DATEDIFF(mm,ip_datetime,getdate())=0 ';

public IPControl(){}//////保存互联网协议(互联网协议)数据信息到数据库/////////public void AddIP(string IP address,string ipSrc,DateTime ipDatetime){//构建连接语句字符串StringBuilder strSQL=new StringBuilder();//创建表示即时通信软件号的参数SqlParameter[]参数=新SqlParameter[] {新SQL参数(PARM IP _地址,SqlDbType .NVarChar,20岁),新的SqlParameter(PARM_IP_SRC,SqlDbType .NVarChar,80岁),新的SQL参数(PARM IP _日期时间,SqlDbType .DateTime)};SqlCommand cmd=new SqlCommand();

//依次给参数赋值,并添加到执行语句中参数[0]。Value=ipAddressparms[1].Value=ipSrcparms[2].Value=ipDatetimeforeach(参数中的参数)cmd .参数。add(parm);

//定义对象资源保存的范围,一旦使用范围结束,将释放对方所占的资源using(SqlConnection conn=new SqlConnection(SQL helper .ConnectionStringLocalTransaction)){//在执行字符串中加载插入语句strSQL .append(SQL _ INSERT _ IPSTAT);conn . Open();

//设定SqlCommand的属性cmd .连接=连接命令.CommandType=CommandType .文本;cmd .CommandText=strSQL .ToString();//执行SqlCommand命令cmd .ExecuteNonQuery();cmd .参数。clear();//如果执行成功,返回没错,否则错误。} }公共字符串GetTotal(){//调用SqlHelper访问组件的方法返回第一行第一列的值对象计数=SqlHelper .ExecuteScalar(SqlHelper .ConnectionStringLocalTransaction,CommandType .Text,SQL_SELECT_TOTAL,null);//返回统计结果返回计数ToString();}公共字符串GetToday(){//调用SqlHelper访问组件的方法返回第一行第一列的值对象计数=SqlHelper .ExecuteScalar(SqlHelper .ConnectionStringLocalTransaction,CommandType .Text,SQL_SELECT_TODAY,null);//返回统计结果返回计数ToString();}公共字符串GetYesterday(){//调用SqlHelper访问组件的方法返回第一行第一列的值对象计数=SqlHelper .ExecuteScalar(SqlHelper .ConnectionStringLocalTransaction,CommandType .Text,SQL_SELECT_YESTERDAY,null);//返回统计结果返回计数ToString();}公共字符串GetMonth(){//调用SqlHelper访问组件的方法返回第一行第一列的值对象计数=SqlHelper .ExecuteScalar(SqlHelper .ConnectionStringLocalTransaction,CommandType .Text,SQL_SELECT_MONTH,null);//返回统计结果返回计数ToString();}}

在Global.asax中使用定时器来统计在线人数和每天每月的访问量

一、在 Application_Start 中创建定时器

复制代码代码如下://以下为使用多个定时器系统。计时器计时器的处理方法//用线重新包一下,定义两个定时器系统穿线。线程myTimer_1=新系统穿线。线程(新系统穿线。ThreadStart(write _ 1));我的计时器_1 .start();系统穿线。线程myTimer_2=新系统穿线。线程(新系统穿线。ThreadStart(write _ 2));我的计时器_2 .start();二、使用定时器每10分钟更新一次在线人数检查一次是否要存入一天流量的信息

复制代码代码如下://使用第一个定时器,每10分钟更新一次在线人数私有void write_1(){//以下使用系统。计时器计时器类每间隔10分钟存一次数据系统计时器。定时器myTimer1=新系统计时器。定时器(600000);//实例化计时器类,设置间隔时间为600000毫秒(10分钟存一次总人数);我的定时器1 .Enabled=true//是否执行系统。计时器计时器流逝事件;我的定时器1 .消逝=新系统计时器。ElapsedEventHandler(我的timer _ Elapsed);//到达时间的时候执行事件myTimer _ ElapsedmyTimer1 .AutoReset=true//设置是执行一次(错误)还是一直执行(真);}//使用第二个定时器,private void write_2(){//以下使用系统。计时器计时器类每间隔10分钟检查一次是否要存入一天流量的信息系统计时器。定时器myTimer2=新系统计时器。定时器(600000);//实例化计时器类,设置间隔时间为600000毫秒(10分钟存一次总人数);我的定时器2 .Enabled=true//是否执行系统。计时器计时器流逝事件;我的定时器2 .消逝=新系统计时器。ElapsedEventHandler(我的timer _人天);//到达时间的时候执行事件myTimer _ peopleDaymyTimer2 .AutoReset=true//设置是执行一次(错误)还是一直执行(真);}

三、创建 myTimer过程来处理在线人数和统计每日、月、年的流量

复制代码代码如下://创建myTimer_Elapsed过程并定义第一个定时器事件,要用来处理在线人数的代码private void myTimer_Elapsed(对象发送方,系统计时器。ElapsedEventArgs e){//如果现在的在现人数大于原有的在现人数,则替换数据表中的在现人数int MaxOnline=Convert .ToInt32(应用程序['在线最大']);int MinOnline=Convert .ToInt32(应用程序['在线whx ']);if(max online min online){ SqlConnection con=Db .db。创建连接();con . Open();SqlCommand cmd=new SqlCommand(' update count people set to tol=' ' Application[' count session ']).ToString()' ',OnLine=' '应用程序[' OnLine whx ']' ',数据时间=' '日期时间.现在。ToString(' yyyy-MM-DD HH:MM:ss ')' ' ',con);cmd .ExecuteNonQuery();con . Close();应用程序['在线最大']=应用程序['在线仓库'];//将现在线人数赋于OnlineMaxApplication[' data times ']=DateTime .现在。ToString(' yyyy-MM-DD HH:MM:ss ');}else{//将总访问人数写入数据库SqlConnection con=Db .db。创建连接();con . Open();SqlCommand cmd=new SqlCommand(' update count people set to tol=' Application[' count session ']).ToString()、con);cmd .ExecuteNonQuery();con . Close();}}//创建我的计时器_人民日过程并定义第二个定时器事件,要用来统计每日、月、年的流量private void myTimer_peopleDay(对象发送方,系统计时器。ElapsedEventArgs e){ try {//当天晚上24时如果(日期时间现在。Hour==23){if (DateTime .现在。分钟=50){//当天晚上24时,写入一天的流量//初始化一个互联网协议(互联网协议的缩写)数据访问对象IPControl cont=new IPControl();//获取今天访问量Int32 countToday=Convert .ToInt32(续. GetToday());//获取本月访问量Int32 countMonth=Convert .ToInt32(续. GetMonth());

//存储过程名sp _ insertcountppeopledaysqlconnection con 1=Db .db。创建连接();会议1 .open();SqlCommand cmd 1=new SqlCommand(' sp _ insert count people day ',con 1);cmd1 .CommandType=CommandType .存储过程;//存储过程名

//调用并设置存储过程参数cmd1 .参数。添加(新的SqlParameter('@peopleDay ',SqlDbType .int));cmd1 .参数。添加(新的SqlParameter('@dateTimes ',SqlDbType .DateTime));

//给参数赋值cmd1 .参数['@peopleDay'].Value=countTodaycmd1 .参数['@dateTimes'].值=日期时间现在。ToString(' yyyy-MM-DD HH:MM:ss ');

cmd1 .ExecuteNonQuery();会议1 .close();

//在一个月的最后一天写入本月的访问量//取本月最后一天(30或者31日)DateTime lastDay=Convert .今天时间(日期时间。现在AddMonths(1).ToString('yyyy-MM-01 ').AddDays(-1);int lastDay1=日期时间。现在。白天;//取当前时间的日期如果(最后一天1。ToString()==最后一天.ToString()) //如果前日期等于本月最后一天的日期,则前本月的流量写入数据库{SqlConnection conM=Db .db。创建连接();康姆. open();SqlCommand cmdM=new SqlCommand(' sp _ insert count people month ',conM);cmdM .CommandType=CommandType .存储过程;//存储过程名

//调用并设置存储过程参数cmdM .参数。添加(新的SqlParameter('@peopleMonth ',SqlDbType .int));cmdM .参数。Add(新的SQL参数(' @ datetime month ',SqlDbType .DateTime));

//给参数赋值cmdM .参数['@peopleMonth'].Value=countMonthcmdM .参数['@dateTimeMonth'].值=日期时间现在。ToString(' yyyy-MM-DD HH:MM:ss ');

cmdM .ExecuteNonQuery();康姆. close();} } } }捕捉

}}

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: