Asp.net 对象之application与session
上篇博客讲解了asp.net中response对象和request对象,这篇博客为大家详细的介绍一下application对象与session对象
Application对象时httpApplicationState对象的一个实例,可以生成一个所有web应用程序都可以存取的变量,这个变量的使用范围涵盖所有使用者,是要他正在用这个网页的程序都可以存取这个变量。
语法: Application[“变量”]=”变量的内容”; 例如:application[“count”]=0;
Application对象的声明周期:他从在与服务器的内容中只要创建了,就会一直存在,知道关闭IIS服务器,或者用page对象的clear方法清除。因为他不会自己消亡,所以注意不要创建过多的对象!
Application对象的常用属性,
属 性 |
说 明 |
AllKeys |
返回全部Application对象变量名到一个字符串数组中 |
Count |
获取Application对象变量的数量 |
Item |
允许使用索引或Application变量名称传回内容值 |
这些属性主要使用的是count属性, 一般用来统计网站的访问数量!
Application对象常用的方法
方 法 |
说 明 |
Add |
新增一个Application对象变量 |
Clear |
清除全部Application对象变量 |
Lock |
锁定全部Application对象变量 |
Remove |
使用变量名称移除一个Application对象变量 |
RemoveAll |
移除全部Application对象变量 |
Set |
使用变量名称更新一个Application对象变量的内容 |
UnLock |
解除锁定的Application对象变量 |
比较常用的lock和unlock 方法。
Application的方法都是用于处理多个用户对存储在Application中的数据进行写入的问题。共有两个:Lock方法:防止其他客户端更改Application对象的值。(仅当前客户可修改和存取);Unlock方法:与Lock方法相反,允许其他客户端更改Application对象的值。
·Lock方法,锁住其他线程对Application对象中stat集合的访问权限。这个方法主要是用来防止对Application的变量操作过程中,其他并发程序可能造成的影响。比如在记数过程中,如果不进行上锁操作,就有可能发生脏读脏写。例如,开始从变量中取得记数值1,
如果在记数并写回到变量之间,另一页面对它发生了一次记数,并先行写回变量,那么最终写回到变量中的值为2,而并不是实际的3。如果采用了上锁机制,在页面读出变量到记数并写回变量的过程中,即使发生了另一次记数,由于变量被锁住,它也不可能在变量被写回以前取得成功,只有等待变量释放,从而形成两者对变量操作的串行性,避免了数据的脏读和脏写。
·Unlock方法,对Application对象Stat集合锁定的解锁操作,释放资源以供其他页面使用。
具体用法:
Application.Lock-锁定Application对象所有变量
Application.Unlock-解锁Application对象所有变量
如;
Application.Lock;
Application("NumCount")=Application("NumCount")+1;(NumCount是在Application_OnStart事件设置的变量)
Application.Unlock;
Application的应用:
◆可以统计目前上站的人数
◆可以用于网站上不同用户之间的通信
◆可以记录广告条被点击的次数
◆可以在每个主页上显示动态信息
◆可以从数据库提取数据供多个网页使用
Session对象
Session对象是HttpSessionState对象的一个实例,其功能和application对象类似,都是用来存储跨网页程序的变量或者对象,但他们的有些特性存在差异。
语法:session[“变量名”]=“变量内容”; variablesName=session[“变量名”];
Session对象常用的属性
属 性 |
说 明 |
TimeOut |
传回或设定Session对象变量的有效时间,如果使用者 超过有效时间没有动作,Session对象就会失效。 默认值为20分钟 |
IsCookieless |
一个布尔值,表示回话ID是嵌入到URL中,还是存储在HTTPCookie中 |
SessionID |
获取回话的唯一标示符 |
TimeOut属性该属性用来定义用户Session对象的时限。如果用户在规定的时间内没有刷新网页,则Session对象就会终止。一般默认为20分钟。 设置方法,一般在web.config中设置,<sessionState mode=”InProc”timeout=”30”/>
Session对象常用的方法
方 法 |
说 明 |
Abandon |
此方法结束当前会话,并清除会话中的所有信息。 如果用户随后访问页面,可以为它创建新会话 (“重新建立”非常有用,这样用户就可以得到新的会话) |
Clear |
此方法清除全部的Session对象变量,但不结束会话 |
Add |
向session对象中添加一个新项 |
Remove |
删除Session对象中集合中指定的项 |
该对象的方法比较简单不在详细介绍。
Session对象的应用
◆session对象主要用于保存用户的各种信息
◆可以通过session对象来判断此用户是否是合法用户
◆在服务器上通过session来区分每一个上网用户
Application对象和session对象的异同
生命周期不同。
Session对象只针对单一网页使用者,不同的客户端无法相互存取。Application对象终止于停止IIS服务,而session对象终止于联机机器离线时,也就是网页使用者关闭浏览器或者超过Session变量的有效时间,Session对象就会消失!
他们都有OnStart事件和OnEnd事件,也是必须放在Global.asa文件里。
ASP.net的Application和Session对象体现了其他ASP内置对象所没有的特征--事件。每一个访客访问服务器时都会触发一个OnStart事件(第一个访客会同时触发Application和Session的OnStart事件,但Application先于Session),每个访客的会话结束时都会触发一个OnEnd事件(最后一个访客会话结束时会同时触发Application和Session的OnEnd事件,但Session先于Application)。
OnStart和OnEnd这两个事件一般应用在虚拟社区中统计在线人数、修改用户的在线离线状态等。要具体定义这两个事件,需要将代码写在Global.asa文件,并将该文件放在站点的根目录下(缺省是\Inetpub\wwwroot\)。另外,Application和Session对象规定了在OnEnd事件里除了Application对象外其他ASP内置对象(Response、Request、Server、Session...)一概不能使用。
只有熟练的掌握这连个对象的用法才能更好的进行服务器编程。
我将在下一篇博客中介绍Asp.net中的Cookie对象和Server对象,请继续关注!