也就是说跟电脑里的进程概念差不多,每启动一个程序有一个独立的进程运行程序。session则是每一台电脑访问网站时,有自己独立的session变量。session与进程不同的是每个session都是独立的不可以互相之间共享,什么意思呢。就是说比如一些购物网站,你买的东西放入购物筐。别的用户是不能查看你的购物筐里买了什么东西,只能你自己看到你自己买的(当然一些购物网站不见得用的就是session打个比方而已)。
这个就是session的特点,也就是说在你访问这个网站的所有页面,是能看见你自己的信息。但你看不见别人的信息。
application不一样application要比session的可见范围要大,也就是说application在一个网站中不仅所有页面都能看得见这个变量,就连所有访问该网站的全部用户都可以看见这个变量。也就是可见范围最广的全局对象。
其实体现application与session不同的最好的地方就是聊天室,聊天室里你对所有人说的话所有人都能看得见这个就是application的特点。而某一个人跟你单独聊天,某一个人说的话只有你能看见,其他人看不见这就是session的特点。
因此application变量一般在服务器(iis)启动时(被第一个用户访问时)创建,而只有在服务器(iis)关闭时才是执行清楚代码。所以application变量创建以后基本上是永久性占用内存的变量,所以网站中最好不要轻易创建特别多的application变量。
而session变量只有在某个用户第一次访问(或某个用户第一次浏览网站)服务器时被创建,知道这个用户退出网站(也就是关闭了所有正在浏览的网页浏览器)时执行清除。所以session并不是永久性的变量,但只有在用户退出时才执行清除,因此如果太多用户访问网站而不退出,则session变量会占用服务器大量内存空间。这就是为什么一些网站会因为访问用户太多而崩溃或死机的原因之一。
代码如下:
protected void Application_Start(object sender, EventArgs e)
{
Application["count"] = 0;
Application["content"] = "聊天记录\n";
}
protected void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application["count"] = (int)Application["count"] + 1;
Application.UnLock();
}
protected void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application["count"] = (int)Application["count"] - 1;
Application.UnLock();
}
protected void button_login_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(textbox_nickname.Text))
{
Session["nickname"] = textbox_nickname.Text;
}
Response.Redirect("ChatRoom.aspx");
}
protected void Page_Load(object sender, EventArgs e)
{
label_count.Text = "当前在线人数为" + Application["count"].ToString() + "人";
if (!IsPostBack)
{
if (Session["nickname"] != null)
{
Application.Add(Session["nickname"].ToString(), Session["nickname"]);
}
textbox_records.Text = Application["content"].ToString();
}
listbox_usernames.Items.Clear();
foreach (string str in Application.Contents)
{
if (!str.Equals("content") && !str.Equals("count") && !str.Equals("name"))
{
listbox_usernames.Items.Add(new ListItem(Application[str].ToString(), Application[str].ToString()));
}
}
}
protected void button_send_Click(object sender, EventArgs e)
{
if (Session["nickname"] != null)
{
Application["content"] += (Session["nickname"].ToString() + "说:" + textbox_sendmsg.Text + "\n");
textbox_records.Text = Application["content"].ToString();
}
}
protected void button_exit_Click(object sender, EventArgs e)
{
Application.Remove(Session["nickname"].ToString());
Application["count"] = (int)Application["count"] - 1;
Response.Redirect("WebCounter.aspx");
}