用XML+Application来编写计数器吧,这样就不用数据库了.
具体方法如下(网上搜索并加入个人意见) 1)网站总共访问人数计数器 这种计数器我们可以使用XML来实现,打开windows的记事本在其中录入以下数据另存为count.xml。 <MyCount> <AllCount>0</AllCount> <MaxCount>0</MaxCount> </MyCount> 其中AllCount标签是记录web页面访问的总人数的,我们来编写代码操纵这个xml文件 <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %>//导入… <Script language="C#" runat=server> HttpCookie CkeCount=new HttpCookie("Count");//来一个cookie变量,用来判断访客是否在您的网站 void Page_Load() { if(Request.Cookies["Count"]==null)//如果cookie为空,说明第一次载入您的页面 { CkeCount.Value="true";//给cookie添加一个值 /* 这里是可选代码,看看cookie是否失效,如果您设置成1个月,有个访客以前访问过您的站点,他的 cookies里面有您存入的值,并且他的cookies没有清空那么再看if语句,那这个访客载入页面时在计数器 中就不加1,如果您不设置cookies保留时间,那么访客离开 您的站点cookie自动消失。 DateTime dt=DateTime.Now; TimeSpan ts=new TimeSpan(30,0,0,0); CkeCount.Expires=dt+ts; */ ///**********xml 操作****************************8 DataSet objDataSet=new DataSet(); objDataSet.ReadXml(Server.MapPath("count.xml")); //dataset读xml文件 objDataSet.Tables["MyCount"].Rows[0]["AllCount"]=Convert.ToInt64(objDataSet.Tables ["MyCount"].Rows[0]["AllCount"])+1;//这里是写如xml,更新第一行Allcount标签的值+1 objDataSet.WriteXml(Server.MapPath("database/count.xml"));//写如xml Response.Cookies.Add(CkeCount);//写入cookies } lbCount.Text="总共"+objDataSet.Tables["MyCount"].Rows[0]["AllCount"].ToString();//显示在页面上 } </script> <asp:label runat=server id=lbCount /> 2)当前在线人数计数器 判断当前有几个人在您的站点,这个计数器比较简单,这里要用到Application变量和session的2个方法 Application变量起着增加,减少人数的作用。 在global.asax文件里面输入以下代码: <script language="c#" runat="Server"> protected void Application_Start(Object sender, EventArgs e) { Application["user_sessions"] = 0;//声明一个application变量来做计数器 } protected void Session_Start(Object sender, EventArgs e) { Application.Lock();//先锁定应用程序,这里大家都明白 Application["user_sessions"] = (int)Application["user_sessions"] + 1; //当session_start方法启动时判断当前有几个人在线,然后赋值到Application["user_sessions"]变量.(int)强制转换类型,卸箱,装箱! Application.Unlock(); } protected void Session_End(Object sender, EventArgs e) { Application.Lock(); Application["user_sessions"] = (int)Application["user_sessions"] - 1; //当用户离开站点的时候,减1 卸箱,装箱! Object=int Application.Unlock(); } 都要写在Session_OnStart,和Session_OnEnd方法里面. </script> 设置label控件把值读出. 3)最大在线人数统计 这个就很简单了,这里用application变量配合xml来完成, global.asax Application.Lock();//锁定应用程序 DataSet objDataSet=new DataSet() objDataSet.ReadXml(Server.MapPath("database/count.xml"));//读xml文件 if(Convert.ToInt64(objDataSet.Tables["MyCount"].Rows[0]["MaxCount"])<(int)Application ["user_sessions"])//如果MaxCount标签里面的值小于当前在线人数的值,就存入,不小于则什么都不做。 objDataSet.Tables["MyCount"].Rows[0]["MaxCount"]=(int)Application["user_sessions"]; objDataSet.WriteXml(Server.MapPath("database/count.xml")); Application.UnLock(); 4)统计今日在线人数计数器 这里要用到日期时间变量和2application变量,声名Application["datetTime"],和Application ["day_count"]变量 global。Asax文件 Application["dateTime"]=0;//先给赋为0 Application["day_count]=0;//今日访问统计变量,初始值为0 Application.Lock(); if(DateTime.Now.Day==Convert.ToInt32(Application["dateTime"])) //如果系统日期(天数,服务器上的) 等于Application["dateTime"]里面的值,则Application ["day_count"]变量累加1. { Application["day_count"]=(int)Application["day_count"]+1; } else//如果不等于则把Application["day_count"]变量赋为1,Application["datetime"]赋为当天,依次 类推 { Application["datetime"]=DateTime.Now.Day; Application["day_count"]=1; } Application.UnLock(); 总结 ----------------------------------------------------------------------------------- 网站总共访问人数计数器也可以设置成每ip,,代码自己写了 :)还有最好把代码放在首页,这样统计还比较现实,因为一个新的浏览者80%不可能从别的页面来访问您的站点。 统计最大在线人数计数器为什么要存入xml文件呢?存入application变量不行吗?很简单:如果服务器断电了那岂不是白存了? 当然这些计数器都不是很准确,但是能大体表现一个网站的流量了 |
|
来自: Ding_GY > 《[C] Website & Code》