网站访问统计在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意外而丢失。
还有就在要实现在这个功能在有一张专门保存数据的表,这张表只需要一个字段就行了。。