1.Application
程序级变量将多个会话和请求之间的全局信息共享。
常用方法Add() Lock() UnLock()
例子:显示历史访问人数和在线人数
Globl.aspx中代码
<span style="font-size:18px;"> protected void Application_Start(object sender, EventArgs e) //设置一个全局变量,实现用户共享
{
//Application["count"] = 0; 给Application对象添加数据
//链接数据库读取数据,一般写成配置文件,
SqlConnection con = new SqlConnection("Server =.;database=MoFang;user id=sa;password=123456;");
con.Open();
SqlCommand cmd = new SqlCommand("select * from TatalNum ", con);
int count = Convert.ToInt32 (cmd.ExecuteScalar());
con.Close();
Application["Totalnum"]=count ;
Application["Onlinenum"] = 0;
}
protected void Session_Start(object sender, EventArgs e) //一次会话中对全局变量进行操作
{
Session.Timeout = 1;
Application.Lock(); //控制访问,加锁
Application["Totalnum"] = (int)Application["Totalnum"] + 1; //总数加1
Application["Onlinenum"] = (int)Application["Onlinenum"] + 1; //总数加1
Application.UnLock(); //解锁,
}
protected void Session_End(object sender, EventArgs e) //会话结束时
{
Application["Onlinenum"] = (int)Application["Onlinenum"] - 1; //在线总人数减1
}
protected void Application_End(object sender, EventArgs e)
{
//链接数据库将Application["Totalnum"]中的数据写入数据库
}</span>
web页面代码
<span style="font-size:18px;"> protected void Page_Load(object sender, EventArgs e) {
this.LblTotal.Text = Application["TotalNum"].ToString();
this.LblOnline.Text = Application["OnlineNum"].ToString();
}
</span>
显示结果:
分析结果:
一、显示:第一次通过网页访问的时候,显示第1、1,当在打开一个浏览器的时候显示2、2。关闭第一个浏览器刷新第二个,按理说第一个浏览器的会话已经结束,此时应该显示2、1,但是还是显示2、2。
原因:客户端将浏览器关闭,会话结束,但是在服务器段并没有立即将会话结束,而是当该会话Session在规定的时间(Timeout设置)内没有操作时,服务器才将该会话结束。
二、所有浏览器关闭时,数据库没有数据,
我们将跟新数据库的操作写在Application_End事件中,所有只有当服务器端的应用程序正常结束的时候才将数据更新到数据库,页面关闭了浏览器,但是服务器端的程序并没有结束!