Asp.net的几个内置对象包括:Application、Session、Cookie、Request、Response、Server。
首先是比较如下的三个。
Application和Session
Application :全局对象,用来存储变量。不同的用户不同的时间都可以访问,在整个应用程序的生存周期中都是有效的。
Session:只是面向单一的用户,当客户首次与服务器连接时建立,同时分配一个SessionID。会话结束或者规定的时间内没有更新,Session被终止。
如下为一个使用Session和Application记录网页浏览量和当前浏览人数的简单的示例程序代码,体会二者的不同
//当第一个用户请求时,触发该事件
protected void Application_Start(object sender, EventArgs e)
{
//定义两个Application变量,在整个应用程序的生命周期里这个变量都是存在的
Application["total"] = count; //记录浏览的总人数
Application["online"] = 0; //记录在线人数
}
//每个用户发送请求是都会触发该事件,建立一个会话
protected void Session_Start(object sender, EventArgs e)
{
//可能同时会有多个Session的Start事件被触发,但是只能依次的每次只能执行一个
Application.Lock();//添加锁
//然后给两个变量加 1 Application["total"] = (int)Application["total"] + 1;
Application["online"] = (int)Application["online"] + 1; Application.UnLock();//执行完之后解锁
}
//每个用户的会话结束时触发该事件
protected void Session_End(object sender, EventArgs e)
{
Application.Lock();//添加锁 <span style="white-space:pre"> </span> //在线人数减1 Application["online"] = (int)Application["online"] - 1; Application.UnLock();//执行完之后解锁
}
上例中,在这整个的过程中,Application对象中的两个变量不同用户都可以使用,而且一直存在直到应用程序停止。而在Session对象的变量只能对一个用户有效,即不同用户的信息使用不同Session对象的变量保存。
Session和Cookie
Cookie:是在客户端保存SessionID的,使得服务器能够区别响应客户请求。有临时的和永久的。临时的在内存中,会话结束Cookie被删除。永久的在硬盘中,并且在指定的时间内一直可以使用。
例如我们在登录一个网易或者CSDN时,会有“是否保存密码”之类的选项,如果选择Cookie就会是永久的,在一段时间内访问网易或者CSDN时都不用在次输入用户名密码,这就是使用保存在硬盘中的Cookie请求服务端。
Session保存在服务端,当在客户端首次与一台WWW服务器链接时,这是生成一个Session,同时在服务端会自动的生成一个SessionID并且将该ID回发到客户端的浏览器,而客户端的浏览器是将该ID保存在Cookie中的,当客户端再次向服务端发送HTTP请求时浏览器会将SessionID添加在HTTP的Header中,服务端会检查SessionID并且回应相应SessionID的Session信息。
Response和Reques
当Web服务器收到客户端的http请求就会针对每次的请求分别建立一个代表请求的request对象和response对象
Response对象提供一些列的用于输出信息的方法,例如Response.Write()
Request对象可获取客户提交的数据,例如Request.QueryString()