一般的网站统计即:只统计网站的访问人数则需要做如下操作:
第一步:在项目的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"] + "人";
}