做最好的自己~~

Be My Personal Best!

导航

网站访问统计在Global.asax中的配置的深入讨论

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Data.SqlClient" %>//引入这个命名空间一定不能少的。。

<script runat="server">
   
    DataBase dbs = new DataBase();
    CommonClass coObj = new CommonClass();
    void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
        int Count = dbs.ExecuteScalar(System.Data.CommandType.Text, "select * from Counts", null);
        Application["LoginTime"] = Count.ToString(); ;//网站访问总计
        Application.Add ("Online",0);//网站在线人数
       
    }
   
    void Application_End(object sender, EventArgs e)
    {
        //  在应用程序关闭时运行的代码
        if (dbs.ExecuteNonQuery(System.Data.CommandType.Text, "update Counts set counts=" + int.Parse(Application["LoginTime"].ToString ()) + "") == 1)
        {
        }
        else
        {
            Response.Write(coObj.MessageBox("出现错误!"));
        }
       
    }
       
    void Application_Error(object sender, EventArgs e)
    {
        // 在出现未处理的错误时运行的代码

    }
 
    void Session_Start(object sender, EventArgs e)
    {
        // 在新会话启动时运行的代码
        Session.Timeout = 5;
        Session["UserId"] = "";
        Application.Lock();
        dbs.ExecuteNonQuery(System.Data.CommandType.Text, "update Counts set counts=" + int.Parse(Application["LoginTime"].ToString()) + "+1");
        Application["LoginTime"] = dbs.ExecuteScalar(System.Data.CommandType.Text, "select * from Counts", null);
        Application["Online"] = Convert.ToString(int.Parse(Application["Online"].ToString()) + 1);
        Application.UnLock();
    }

    void Session_End(object sender, EventArgs e)
    {
        // 在会话结束时运行的代码。
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
        // 或 SQLServer,则不会引发该事件。
        Application.Lock();
        Application["Online"] = Convert.ToString(int.Parse(Application["Online"].ToString()) - 1);
        Application.UnLock();
    }
      
</script>


这个统计方式的一大好处是可以避免IIS服务器因意外停止时而导致访问总数清0的现现像,因为每一次的访问都会加一然后将数据存入数据库中,保证了数据不会因IIS意外而丢失。

  还有就在要实现在这个功能在有一张专门保存数据的表,这张表只需要一个字段就行了。。

posted on 2008-07-06 11:14  阿万  阅读(492)  评论(0编辑  收藏  举报