[置顶] Application,Session,Cookie之Application对象
概述
Application为全局作用域,且只有一个Application对象,它可以存储和访问任意页面的变量(数据存储类型都是Object,也就是任意类型),同时也被多页面使用(也为引用)。
Application集合
Contents用于获取(除Object标记和CreateObject方法创建的对象)所有Application对象
CreateObject集合取得Object标记建立的对象
关于 Application的方法
这里我们重点看下 Lock和集合的操作
Lock
Lock是避免操作同一变量时出现与时间有关的错误
实例1如:我们设置当有用户访问页面时,Application对象的Visitor加1
protected void Session_Start(object sender,EventArgs e) { Session.Timeout = 1;//会话保持时间 Application.Lock();//锁定application对象变量,防止修改冲突 Application["Visitor"] =(int) Application["Visitor"] + 1;//注意这里的数据类型转换,Object类型转为Int Application.UnLock(); }
集合的操作
Get, Set
Remove,Add
集合对应的操作和定义类的属性是相同的。
以下实例供参考
实例2如:我们想在Application的Stat集合中添加一个名为Name,值是Tom的字符串
Application.Add("Name","Tom"); Application("Name")="Tom";
有一天我们想获取Name的名字,那么怎样获取呢,
Dim tmp as object Tmp=Application("Name")或是 Tmp=Application.get("Name")都是可以获取的
修改Tom的值与此类似,这里就不再重复了
综合实例:
这里我们再来做一个访问网页次数的例子,这次和上次不同的是和Session进行对比分析。
<%@ PageLanguage="C#" AutoEventWireup="true"CodeBehind="test.aspx.cs" Inherits="global.test" %> <!DOCTYPE html> <htmlxmlns="http://www.w3.org/1999/xhtml"> <headrunat="server"> <metahttp-equiv="Content-Type" content="text/html;charset=utf-8"/> <title></title> <style type="text/css"> div { font-size:20px; font-weight:bold; color:#f00; margin-top:30px; margin-left:40px; } </style> </head> <body> <form id="form1"runat="server"> <div> <% //设置ApplicationCount的值 int applicationCount = 1; int sessionCount = 1; //if语句判断appciationCount的值是否为空,不为空逐步加1,为空设置为1 if(Application["applicationCount"] == null) { Application["applicationCount"] = 1; } //不为空,aplication的值加1 else { applicationCount =(int)Application["ApplicationCount"] + 1; Application["applicationCount"] = applicationCount; } //ifsessionCount的值为空,位置为1,否则值加1 if (Session["sessionCount"]== null) { Session["sessionCount"] =1; } //sessionCount值不为空,值加1 else { sessionCount =(int)Session["sessionCount"] + 1;//将Object对象转为int类型,进行相加 Session["sessionCount"] =sessionCount; } Response.Write("当前页面由Application记录到的被访问了" + applicationCount +"次<br/>"); Response.Write("当前页面由Session记录到的被访问了" + sessionCount +"次<br/>"); %> </div> </form> </body> </html>
在页面运行后,我们看到如下结果Session和Application中的值是一样的,即使我们按F5刷新页面,结果也是一样,如下图:
效果图如下。
然后我们重新打开一个浏览器应用程序(注意不要在当前窗口中输入),会看到另一种如下情况
为何会出现这种情况呢,原因就在于Application是属于所有网站用户的,它会保存全局的数据,从web启动到web停止期间的所有的访问次数。而Session只与特定用户有关,只适合保存特定用户的信息。
通过以上小结我们发现:
Application是用于存储,访问和被访问全局对象。可添加删除对象,也可以有对象的启动,销毁事件(详见Global篇),
它和session的不同之处之一就体现在作用域的方面,session为个体所独有,Application为全局的。