不是站点计数器,而是每一个页面浏览的次数,下面的计数器是全局的,只能给站点的访问量计数。
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;namespace qx
{
    public class Global : System.Web.HttpApplication
    {        protected void Application_Start(object sender, EventArgs e)
        {
            Application["counter"] = 0;
        }        protected void Application_End(object sender, EventArgs e)
        {        }
        void Session_Start(object sender, EventArgs e)
        {
            Application.Lock();
            Application["counter"] = (int)Application["counter"] + 1;
            Application.UnLock();
        }
    }
}
在其他的asp.net页面里如果要调用就直接 您是第<%=Application["counter"]%> 位访问者。 
我想给每一个页面设置一个计数器,请问怎么写?谢谢  

解决方案 »

  1.   

    用js
    第一个 先建一个webservice 保存访问记录webservice.asmx[WebService(Namespace = "http://www.abc.com/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class WebService : System.Web.Services.WebService
    {
     [WebMethod]
        public void RecordVisited(string url, string reffer)
        {
            try
            {
                SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString);
                #region Parameters
                SqlParameter[] parameters = {
    new SqlParameter("@IP", SqlDbType.VarChar,50 ),
    new SqlParameter("@UserName", SqlDbType.VarChar,50 ),
    new SqlParameter("@Location", SqlDbType.VarChar,100 ),
                    new SqlParameter("@Reffer",SqlDbType.VarChar,500) };
                parameters[0].Value = HttpContext.Current.Request.UserHostAddress; //访问ip
                parameters[1].Value =  "" ;  //已登陆的用户名
                parameters[2].Value = url; //访问地址
                parameters[3].Value = reffer;  //从哪里点击到这个面页
                #endregion
                SqlCommand sqlcmd = sqlConn.CreateCommand();
                sqlcmd.CommandText = " insert into [VisiteRecords] ( [IP], [UserName], [Location], [ActionTime],[Reffer]  ) values( @IP, @UserName, @Location, getdate(),@Reffer ) ";
                for (int i = 0; i < parameters.Length; i++)
                {
                    sqlcmd.Parameters.Add(parameters[i]);
                }
                sqlConn.Open();
                sqlcmd.ExecuteNonQuery();
                sqlConn.Close();
            }
            catch (Exception e){ }
        }    [WebMethod]
        public void RecordStay(string url,int staysecods)
        {
            SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString);
            #region Parameters
            SqlParameter[] parameters = {
    new SqlParameter("@IP", SqlDbType.VarChar,50 ),
    new SqlParameter("@UserName", SqlDbType.VarChar,50 ),
    new SqlParameter("@Location", SqlDbType.VarChar,100 ),
                    new SqlParameter("@StayCount",SqlDbType.Int,4) };
            parameters[0].Value = HttpContext.Current.Request.UserHostAddress; //访问ip
            parameters[1].Value = ""; ////已登陆的用户名
            parameters[2].Value = url; //访问的地址
            parameters[3].Value = staysecods;  //在此页面停留时间        #endregion
            SqlCommand sqlcmd = sqlConn.CreateCommand();
            sqlcmd.CommandText = " insert into [VisiteStay] ( [IP], [UserName], [Location],[StayCount], [ActionTime]  ) values( @IP, @UserName, @Location,@StayCount ,getdate() ) ";
            for (int i = 0; i < parameters.Length; i++)
            {
                sqlcmd.Parameters.Add(parameters[i]);
            }
            sqlConn.Open();
            sqlcmd.ExecuteNonQuery();
            sqlConn.Close();
        }
    }
    2 建立可以访问该webservice的js脚js.js
    // JScript 文件
    function Record()
    {
        var   url = "/WebService.asmx"  ; 
        var   uri = "http://www.abc.com" ;  
        var   xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
        if(xmlhttp == null)return;
        var   soapaction   =   uri   +   "/"   +   'RecordVisited'  ; 
        xmlhttp.Open("POST",url,true, "","")   ;
        xmlhttp.setRequestHeader("SOAPAction",   soapaction)  ; 
        xmlhttp.setRequestHeader("Content-Type","text/xml")  ; 
        var content = '<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">  <soap:Body>  <RecordVisited xmlns="http://www.netufi.cn/"> <url>'+window.location+'</url> <reffer>'+escape(document.referrer)+'</reffer>  </RecordVisited> </soap:Body></soap:Envelope> ';
        xmlhttp.Send   (content)  ;
       }function Stay()
    {
        var   url = "/WebService.asmx"  ; 
        var   uri = "http://www.abc.com" ;  
        var   xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
        if(xmlhttp == null)return;
        var   soapaction   =   uri   +   "/"   +   'RecordStay'  ; 
        xmlhttp.Open("POST",url,true, "","")   ;
        xmlhttp.setRequestHeader("SOAPAction",   soapaction)  ; 
        xmlhttp.setRequestHeader("Content-Type","text/xml")  ; 
        var content = '<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">  <soap:Body>  <RecordStay xmlns="http://www.netufi.cn/"> <url>'+window.location+'</url>   <staysecods>'+staytimecount+'</staysecods>   </RecordStay> </soap:Body></soap:Envelope> ';
        xmlhttp.Send   (content)  ;
        
    }//添加访问记录var staytimecount = 0;function addcount()
    {
        staytimecount += 1;
    }
    //增加计数时间
    function loadWindow()
    {
        Record();
        staytimecount = 0;
        window.setInterval("addcount()",1000);
    }function unloadWindow()
    {
        Stay();
    }
    //添加事件
    window.attachEvent("onload", function(){ loadWindow();  });
    window.attachEvent("onunload", function(){ unloadWindow();  }); 3 在global.asax中将这个js引用添加到每个页面<script runat="server">
     protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            if (HttpContext.Current.Handler is Page)
            {
                Page pa = HttpContext.Current.Handler as Page;  //如果访问的是页面,则添加
                pa.Load += new EventHandler(pa_Load);
            }
        }    void pa_Load(object sender, EventArgs e)
        {
            if (HttpContext.Current.Handler is Page)
            {
                Page pa = HttpContext.Current.Handler as Page;
                try
                {
                    pa.Header.Controls.Add(new LiteralControl(" <script language=\"javascript\" type=\"text/javascript\" src=\"/js.js\"></script>"));
                }
                catch
                {
                     //此处记录未能添加的页面,检查原因或手工添加js引用既可
                }
            }
        }
      

  2.   

    其实用LovlyPuppy的WebService的方法非常好,但是如果你实在不会,那么我给你一个简单的方法.
    新建一个类PageNum,引入SQL的命名空间
    using System.Data.SqlClient;
    设计数据库,添加PageNum表,里面加入列
    Url                Num ... 
    index.aspx          0
    login.aspx          0上面加如类似的信息,NUM字段默认为0次吧.
    下面是这个类的Code,里面的数据库连接字符串自己改吧.
     public class PageNum : System.Web.UI.Page
        {
            /// <summary>
            /// 默认构造器,添加页面初始化的方法.
            /// </summary>
            public PageNum()
            {
                this.Init += new EventHandler(PageBase_Init);
            }        private void PageBase_Init(object sender, EventArgs e)
            {
                if (RedNum())
                {
                    UpDateNum();
                }
                else
                {
                    Response.Write("该页并没有在加入统计");
                }
                
            }        /// <summary>
            /// 获得页面路径
            /// </summary>
            /// <returns></returns>
            private string ModuleName()
            {
                string path = this.Request.Path.ToLower();
                string[] str = path.Split('/');
                return str[str.Length - 1].Trim();        }
            /// <summary>
            /// 判断数据库是否加入该页面统计
            /// </summary>
            /// <returns></returns>
            private bool RedNum()
            {
                string sql = "select * from PageNum where Url='" + ModuleName() + "'";
                SqlConnection Conn = new SqlConnection("这里写数据库连接字符串");
                Conn.Open();
                SqlCommand cmd = new SqlCommand(sql, Conn);
                int mCount = cmd.ExecuteScalar();
                Conn.Close();
                if (mCount != 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }        /// <summary>
            /// 更新相关页面访问次数
            /// </summary>
            private void UpDateNum()
            {
                int mNum;
                string sql = "select * from PageNum where Url='" + ModuleName() + "'";
                string UpSql = "update PageNum set Num='" + mNum + "' where Url='" + ModuleName() + "'";
                SqlConnection Conn = new SqlConnection("这里写数据库连接字符串");
                Conn.Open();
                SqlCommand cmd = new SqlCommand(sql, Conn);
                SqlDataReader dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    mNum = Int32.Parse(dr["Num"]) + 1;
                    dr.Close();
                    SqlCommand cmd = new SqlCommand(UpSql, Conn);
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                }
                Conn.Close();
            }
        }
    类写好之后,当你把数据库需要统计的页面文件名加入后,在该页里的CS文件里把Page_Load上面类继承的部分改为上面写的类public partial class _Default : PageNum反正你要进行统计的页全部继承PageNum类,在数据库也要写对应的页面名.这样就OK了,怎么样取出我就不用写了,如果怎么取都不会,那你去好好看看书吧.