ASP.NET开发中的五大对象:
在web应用程序运行时,ASP.NET需要收集有关当前应用程序、用户会话以及响应浏览器等方面的信息。为了解决这些问题,在ASP.NET中包含了处理这些信息的类,用于封装这些上下文信息。
ASP.NET中的这些类有HttpResponse, HttpRequest, HttpApplicationState,HttpServer,Utility,HttpSessionState等。它们对应的实例对象是Response,Request,Application,Server,Session,被定义在Page类中,可以通过Page对象直接访问。
Request对象(检索从浏览器发送到服务器的请求信息)。
Request对象用于获取从浏览器向服务器所发送的请求中的信息。当用户单击“提交”按钮时,包含在输入控件中的数据信息将会与表单一起被发送到服务器端。服务器端的Request对象就会读取通过HTTP请求发送的数据。
Request对象使用比较多的是其中的集合,其调用方法如下所示。
Request.Collection["Variable"]
其中的Collection代表集合,其取值有Form,QueryString,ServerVariable,Cookies等集合。Form集合用于收集表单中使用POST方法提交的请求数据,对数据的提取必须是在服务器端进行。而且POST请求必须用Form表单来发送。
QueryString集合的功能与Form集合的功能相似。用来接收使用GET方法提交的数据信息。这种提交方式会将数据列于URL中“?”号的后面,通常称为“URL的附加信息”。反过来,如果一次HTTP请求事件中,被请求程序的URL中带有“?”并且其后面跟有数据列表,则表示此次请求方式为GET 方法。
ServerVariable集合用于获取环境变量,其中包含了服务器和客户端的各种系统信息。其使用格式如下所示。
Request.ServerVariable[参数类型]
Cookies集合在ASP.NET中用于共享数据,它的共享数据存放在客户端系统盘的Documents and Settings\Administrator\Cookies中。用于存放客户端相关的信息数据,如数字、字符串、日期等。每个浏览器都拥有自己的Cookie。它常用于同一计算机,不同浏览器页面之间的数据传递,以达到数据共享的目的。
在ASP、PHP等语言中,如果客户端禁用写入Cookie,则会导致程序不能使用Cookie。但是,在ASP.NET中,可以在Web.config文件中写入如下所示的语句,便可以实现在任何情况下均可写入。
<sessionState cookieless = "true"> </sessionState>
使用Cookie,需要用Reques和Response这两个对象。可以将Cookie看做是这两个对象的子对象。其使用分别为写入数据和读取数据两种。可以使用下面的方法写入和读取“Cookie“中的数据。写入数据的格式如下。
Response.Cookies[Cookie名称].Value = 写入数据;
或者如下。
Response.Cookies[Cookie的索引号].Value = 写入数据;
读取数据如下。
CookiesValue = Request.Cookie["Cookie名称"].Value;
或者如下。
CookiesValue = Request.Cookie["Cookie索引号"].Value;
其中的“Cookie名称”为任意的数字、字符串、日期等对象名称。“Cookie索引号”从0开始,对应了Cookies集合中的某个Cookie。对应的,也可以移出Cookies中的某个Cookie,其格式如下。
Response.Cookies.Remove("需要移出的Cookie名称");
Response.Cookies.Clear();
其中前者用于移出某个指定名称的Cookie,而后者则用于将Cookies集合中所有的Cookie移出。(Cookie对象是有生命周期的。默认情况下,其有效时间为20分钟。如果超过20分钟,在写入的Cookie便会被清除。当然,也可以设置Cookie对象的有效保留时间。其方法如下。)
Response.Cookies[Cookie名称].Expires = DateTime;
也即是通过Expires(过期)属性进行设置。只是设置的属性值要求是DateTime类型。下面程序定义了一个过期时间为两天的Cookie。
Response.Cookies["CookieStr"].Expires = DateTime.Now.AddDays(2);
Application对象(共享应用程序全局信息)
Application对象用于表示了整个网站应用程序的状态,这些状态通过Application对象实现数据的共享。所有访问该网站应用程序的计算机,都可以访问这些数据。
Application数据的存储方式
通过Application对象可以实现数据的读取和写入。
其中读取数据的格式如下。
数据 = Application[变量名];
或者如下。
数据 = Application[索引号];
写入数据格式如下所示。
Application[变量名] = 数据;
或者如下。
Application[索引号] = 数据;
其中的“变量名”表示存储数据的变量,该变量需要使用双引号括起来。“索引号”从0开始,对应着Application对象中的某个变量。它们的结果是一样的。
对应的,也可以删除Application对象中的某项数据。其格式如下所示。
Application.Remove("命名对象");
Application.RemoveAt("命名对象的索引");
如果需要移出Application对象中的所有数据,则可以使用如下的格式操作。
Application.RemoveAll();
Application.Clear();
由于Application对象是一个共享对象。也就是说,很多计算机都可以同上访问其中的内容。这便出现了一个问题,当两个甚至多个计算机同时对其中的对象进行操作时。服务器将面临怎样处理这个共享关系问题。我们可以通过加锁和解锁来实现对数据的无冲突访问,实现代码如下。
Application.Lock();
int count = Convert.ToInt32(Application["count"].ToString());
Application["count"] = count + 1;
Application.UnLock();
Session对象(维护每个客户的个人信息)
当客户端连接到服务器后,服务器端便会产生并维护一个客户端会话(Session)。简单地说就是服务器用于识别客户端而给它的一个编号。实际上,Web服务器运行时,可能会有很多个用户同时浏览该服务器上的网站。当每个用户(浏览器)第一次与这台Web服务器建立连接时。服务器就为该用户(浏览器)建立一个会话(Session)。同时服务器将自动为其分配一个SessionID(这将在后面的程序中演示),用于标记这个用户(浏览器)的唯一身份。这个SessionID是由Web服务器随机产生的一个由24个字符组成的字符串。这个唯一的SessionID实际上是非常重要的。当一个客户端用户提交一个表单时,浏览器会将用户(浏览器)的SessionID自动附加在HTTP头信息中,一并发送到服务器端。当服务器处理完这个表单请求后,便通过SessionID所对应的用户,将结果返回。
用Session存储数据
与Application对象一样,Session对象也用于共享多个页面的数据。Session与Application对象的相同点是两者都用于共享数据,并且数据类型可以是数字、字符串、日期甚至是复杂的对象。同时他们都存放在服务器端,这与Cookie不同的。两者的不同在于,前者代表一个浏览器窗口,而后者代表整个网站应用程序,并且Application对象的数据用于对所有的网站用户共享。如下图所示是Session与Application作用范围的示意图。
同样,Session也分为读取和写入数据两种方法。
可以使用如下方式实现数据的读取。
数据 = Session[变量名];
或者使用如下方式。
数据 = Session[索引号];
写入数据格式如下所示。
Session[变量名] = 数据;
或者使用如下的方式。
Session[索引号] = 数据;
对应的,也可以删除Session对象中的某项数据,则可以使用如下格式操作。
Session.Remove("命名对象");
Session.RemoveAt(“命名对象的索引”);
要移出Application中对象中的所有数据,则可以使用如下格式操作。
Session.RemoveAll();
Session.Clear();