ASP.NET中关于网站统计的一些常见问题

来源:互联网 发布:找不到网络上的打印机 编辑:程序博客网 时间:2024/05/16 11:09

一般的网站统计即:只统计网站的访问人数则需要做如下操作:

第一步:在项目的Global.asax文件中的Application_Start函数 中做如下操作:

 void Application_Start(object sender, EventArgs e)
        {
            // 在应用程序启动时运行的代码
            Application["Count"] = 0;

        }

即先定义一个Application键值对,并为其赋值为0,即网站发布时访问人数为0,

第二步:在Global.asax文件中的Session_Start函数 中做如下操作:
        void Session_Start(object sender, EventArgs e)
        {
            // 在新会话启动时运行的代码
            Application.Lock();//先对Application["Count"]进行加锁,防止并发导致的计数混乱
            int count = (int)Application["Count"];           

             count++;//如果有人访问本网站则触发这个函数,同时对Application["Count"]进行加一,以达到计数的效果

            Application["Count"] = count;//最后将加过的数重新赋值给Application["Count"]
            Application.UnLock();//进行解锁

      }

第三步:这样就可以在.aspx.cs中使用Application["count"]进行显示网站的访问统计了

需要在页面的加载函数里做如下处理:

protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "您是本站的第" + Application["Count"] + "访客";
        }

这样就完成了网站的访问统计。

 

网站的在线统计跟网站的页面统计差不多,但是也有些不同的地方,因为网站访问统计只需要添加访问人数即可,但是网站在线统计还需要对离线的人数进行删减

操作流程如下

第一步:在项目的Global.asax文件中的Application_Start函数 中做如下操作:

 void Application_Start(object sender, EventArgs e)
        {
            // 在应用程序启动时运行的代码
            Application["Count"] = 0;

        }

即先定义一个Application键值对,并为其赋值为0,即网站发布时访问人数为0,

第二步:在Global.asax文件中的Session_Start函数 中做如下操作:
        void Session_Start(object sender, EventArgs e)
        {
            // 在新会话启动时运行的代码
            Application.Lock();//先对Application["Count"]进行加锁,防止并发导致的计数混乱
            int count = (int)Application["Count"];           

             count++;//如果有人访问本网站则触发这个函数,同时对Application["Count"]进行加一,以达到计数的效果

            Application["Count"] = count;//最后将加过的数重新赋值给Application["Count"]
            Application.UnLock();//进行解锁

      }

第三步:在Global.asax文件中的Session_Start函数中做如下操作:

void Session_End(object sender, EventArgs e)

 {

 // 在会话结束时运行的代码。

// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为  InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer // 或 SQLServer,则不会引发该事件。

 Application.Lock();

 int Count = (int)Application["Count"];

 Count--;

Application["Count"] = Count;

 Application.UnLock();

 }

第四步:在Web.Config文件中设置SeeionState模式为InProc,以保证当用户长时间不对页面进行操作时可以触发此事件,如果会话模式SatateServer或者SqlServer等其他模式,则不会触发该事件,达不到在线统计的效果

在Web.Config文件中配置如下:

<system.web>//在web节点中进行配置
    <sessionState mode="InProc" cookieless="true" timeout="1"/>  //mode即为配置模式这里使用InProc模式,cookieless=“true”即用户浏览器不支持Cookie时启用会话状态,timemout即为session过期时间,以分钟为单位,默认时间为20分钟,简介其他的模式:

//modeInProc模式
/优点:获取session状态的速度快,session状态直接存储在iis的进程中。
//缺点:易丢失,经常需要重新登录

//StateServer模式
//优点:session状态单独存储在一个进程中,不会因为iis或者应用的重启而丢失状态
//缺点:获取session状态的速度比InProc慢一些,毕竟是两个不同的进程。

//在开发的时候,对应用有一点修改,就会导致应用的重启,这时候如果使用InProc模式
//,那么每次都需要重新登录,比较浪费时间.建议使用StateServer模式。并在iis里面设置超时时间长一些。

</system.web>

第五步:这样就好了可以在页面加载时显示当前在线人数了

protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "在线人数" + Application["Count"] + "人";
        }