收藏 分销(赏)

ASP.NET内置对象应用程序配置和缓存.doc

上传人:二*** 文档编号:4765805 上传时间:2024-10-12 格式:DOC 页数:27 大小:374KB
下载 相关 举报
ASP.NET内置对象应用程序配置和缓存.doc_第1页
第1页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第13章 ASP.NET内置对象,应用程序配置和缓存Web应用程序在传统的意义上来说是无状态的,Web应用不能像Win Form那样维持客户端状态,所以在Web应用中,通常需要使用内置对象进行客户端状态的保存。这些内置对象能够为Web应用程序的开发提供设置,配置以及检索等功能。13.1 ASP.NET内置对象在ASP的开发中,这些内置对象已经存在,这些内置对象包括Response、Request、Application等,虽然ASP是一个可以称得上是“过时的”技术,但是在ASP.NET开发人员中依旧可以使用这些对象。这些对象不仅能够获取页面传递的参数,某些对象还可以保存用户的信息,如Cooki

2、e、Session等。13.1.1 Request传递请求对象Request对象是HttpRequest类的一个实例,Request对象用于读取客户端在Web请求期间发送的HTTP值。Request对象常用的属性如下所示。q QueryString:获取HTTP查询字符串变量的集合。q Path:获取当前请求的虚拟路径。q UserHostAddress:获取远程客户端IP主机的地址。q Browser:获取有关正在请求的客户端的浏览器功能的信息。1QueryString:请求参数QueryString属性是用来获取HTTP查询字符串变量的集合,通过QueryString属性能够获取页面传递的

3、参数。在超链接中,往往需要从一个页面跳转到另外一个页面,跳转的页面需要获取HTTP的值来进行相应的操作,例如新闻页面的news.aspx?id=1。为了获取传递过来的id的值,则可以使用Request的QueryString属性,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) if (!String.IsNullOrEmpty(Request.QueryStringid)/如果传递的ID值不为空 Label1.Text = Request.QueryStringid;/将传递的值赋予标签中 else Label1.T

4、ext = 没有传递的值;/提示没有传递的值 if (!String.IsNullOrEmpty(Request.QueryStringtype)/如果传递的TYPE值不为空 Label2.Text = Request.QueryStringtype;/获取传递的TYPE值 else Label2.Text = 没有传递的值;/无值时进行相应的编码 上述代码使用Request的QueryString属性来接受传递的HTTP的值,当通过访问页面路径为“http:/localhost:29867/Default.aspx”时,默认传递的参数为空,因为其路径中没有对参数的访问。而当访问的页面路径为“

5、http:/localhost:29867/Default.aspx?id=1&type=QueryString&action=get”时,就可以从路径中看出该地址传递了三个参数,这三个参数和值分别为id=1、type=QueryString以及action=get。2Path:获取路径通过使用Path的方法可以获取当前请求的虚拟路径,示例代码如下所示。 Label3.Text = Request.Path.ToString();/获取请求路径当在应用程序开发中使用Request.Path.ToString()时,就能够获取当前正在被请求的文件的虚拟路径的值,当需要对相应的文件进行操作时,可以

6、使用Request.Path的信息进行判断。3UserHostAddress:获取IP记录通过使用UserHostAddress的方法,可以获取远程客户端IP主机的地址,示例代码如下所示。 Label4.Text = Request.UserHostAddress;/获取客户端IP在客户端主机IP统计和判断中,可以使用Request.UserHostAddress进行IP统计和判断。在有些系统中,需要对来访的IP进行筛选,使用Request.UserHostAddress就能够轻松的判断用户IP并进行筛选操作。4Browser:获取浏览器信息通过使用Browser的方法,可以判断正在浏览网站的

7、客户端的浏览器的版本,以及浏览器的一些信息,示例代码如下所示。 Label5.Text = Request.Browser.Type.ToString();/获取浏览器信息这些属性能够获取服务器和客户端的相应信息,也可以通过“?”号进行HTTP的值的传递和获取,上述代码运行结果如图13-1所示。图13-1 Request对象Request不仅包括这些常用的属性,还包括其他属性,例如用于获取当前目录在服务器虚拟主机中的绝对路径(如ApplicationPath)。另外,开发人员也可是使用Request中的Form属性进行页面中窗体的值集合的获取。13.1.2 Response请求响应对象Resp

8、onse对象是HttpResponse类的一个实例。HttpResponse类用户封装页面操作的HTTP响应信息。Response对象的常用属性如下所示。q BufferOutput:获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页面之后将其发送。q Cache:获取Web页面的缓存策略。q Charset:获取或设置输出流的HTTP字符集类型。q IsClientConnected:获取一个值,通过该值指示客户端是否仍连接在服务器上。q ContentEncoding:获取或设置输出流的HTTP字符集。q TrySkipIisCustomErrors:获取或设置一个值,指定是否支持

9、IIS 7.0自定义错误输出。1Response常用属性BufferOutput的默认属性为True。当页面被加载时,要输出到客户端的数据都暂时存储在服务器的缓冲期内并等待页面所有事件程序,以及所有的页面对象全部被浏览器解释完毕后,才将所有在缓冲区中的数据发送到客户端浏览器,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) Response.Write(缓冲区清除前.);/输出缓冲区清除 上述代码在cs文件中重写了Page_Load事件,该事件用于中向浏览器输出一行字符串“缓冲区清除前”。在ASPX页面中,可以为页面增

10、加代码以判断缓冲区的执行时间,示例代码如下所示。 /输出字符串 上述代码在页面中插入了一段代码,并输出字符串“缓冲区被清除”。在运行该页面时,数据已经存放在缓冲区中。然后IIS才开始读取HTML组件的部分,读取完毕后才将结果送至客户端浏览器,所以在运行结果中可以发现,“缓冲期清除前”是在“缓冲区被清除”字符串之前出现,如图13-2所示。图13-2 BufferOutput因为BufferOutput属性默认为true,所以上述代码并无法看到明显的区别,当在浏览器输出前清除缓冲区时,则可以看出区别。示例代码如下所示。 Response.Write(缓冲区清除前.); Response.Clear

11、();/清除缓冲区当使用Response的Clear方法时,缓冲区就被显式的清除了。在运行后,“缓冲区清除前”字符串被清除,并不会呈现给浏览器。当需要屏蔽Clear方法对缓冲区的数据清除,则可以指定BufferOutput的属性为False,示例代码如下所示。 Response.BufferOutput = false;/设置缓冲区属性 Response.Write(缓冲区清除前.);/设置清除前字符 Response.Clear();/清除缓冲区使用上述代码将指定BufferOutput的属性为False,在运行时缓冲区数据不会被Clear方法清除。2Response常用方法Response

12、方法可以输出HTML流到客户端,其中包括发送信息到客户端和客户端URL重定向,不仅如此,Response还可以设置Cookie的值以保存客户端信息。Response的常用方法如下所示:q Write:向客户端发送指定的HTTP流。q End:停止页面的执行并输出相应的结果。q Clear:清除页面缓冲区中的数据。q Flush:将页面缓冲区中的数据立即显示。q Redirect:客户端浏览器的URL地址重定向。在Response的常用方法中,Write方法是最常用的方法,Write能够向客户端发送指定的HTTP流,并呈现给客户端浏览器,示例代码如下所示。 Response.Write(这是一串

13、HTML流);上述代码则会向浏览器输出一串HTML流并被浏览器解析,如图13-3所示。图13-3 Response.Write方法当希望在Response对象运行时,能够中途进行停止时,则可以使用End方法对页面的执行过程进行停止,示例代码如下所示。 for (int i=0; i 100; i+)/循环100次 if (i 10)/判断i10 Response.Write(当前输出了第 + i + 行);/i10则输出i else/否则停止输出 Response.End();/使用了End方法停止执行 上述代码循环输出HTML流“当前输出了第X行”,当输出到10行时,则停止输出,如图13-4

14、所示。图13-4 Response.End方法Redirect方法通常使用于页面跳转,示例代码如下所示。 Response.Redirect();/页面跳转执行上述代码,将会跳转到相应的URL。13.1.3 Application状态对象Application对象是HttpApplication类的实例,将在客户端第一期从某个特定的ASP.NET应用程序虚拟目录中请求任何URL资源时创建。对于Web应用上的每个ASP.NET应用程序都要创建一个单独的实例。然后通过内部Application对象公开对每个实例进行引用。1Application对象的特性对于Application对象有如下特性:q

15、 数据可以在Application对象之内进行数据共享,一个Application对象可以覆盖多个用户。q Application对象可以用Internet Service Manager来设置而获得不同的属性。q 单独的Application对象可以隔离出来并运行在内存之中。q 可以停止一个Application对象而不会影响到其他Application对象。Application对象常用的属性有:q AllKey:获取HttpApplicationState集合中的访问键。q Count:获取HttpApplicationState集合中的对象数。其中Application对象的常用方法有

16、:q Add:新增一个Application对象变量。q Clear:清除全部的Application对象变量。q Get:通过索引关键字或变量名称得到变量的值。q GetKey:通过索引关键字获取变量名称。q Lock:锁定全部的Application对象变量。q UnLock:解锁全部的Application对象变量。q Remove:使用变量名称移除一个Application对象变量。q RemoveAll:移除所有的Application对象变量。q Set:使用变量名更新一个Application对象变量。2Application对象的使用通过使用Application对象的方法,能

17、够对Application对象进行操作,使用Add方法能够创建Application对象,示例代码如下所示。 Application.Add(App, MyValue);/增加Application对象 Application.Add(App1, MyValue1);/增加Application对象 Application.Add(App2, MyValue2);/增加Application对象若需要使用Application对象,可以通过索引Application对象的变量名进行访问,示例代码如下所示: Response.Write(ApplicationApp1.ToString();/输

18、出Application对象上述代码直接通过使用变量名来获取Application对象的值。通过Application对象的Get方法也能够获取Application对象的值,示例代码如下所示。 for (int i = 0; i Application.Count; i+)/遍历Application对象 Response.Write(Application.Get(i).ToString();/输出Application对象 Application对象通常可以用来统计在线人数,在页面加载后可以通过配置文件使用Application对象的Add方法进行Application对象的创建,当用户

19、离开页面时,可以使用Application对象的Remove方法进行Application对象的移除。当Web应用不希望用户在客户端修改已经存在的Application对象时,可以使用Lock对象进行锁定,当执行完毕相应的代码块后,可以解锁。示例代码如下所示。 Application.Lock();/锁定Application对象 ApplicationApp = MyValue3;/Application对象赋值 Application.UnLock();/解锁Application对象上述代码当用户进行页面访问时,其客户端的Application对象被锁定,所以用户的客户端不能够进行App

20、lication对象的更改。在锁定后,也可以使用UnLock方法进行解锁操作。13.1.4 Session状态对象Session对象是HttpSessionState的一个实例,Session是用来存储跨页程序的变量或对象,功能基本同Application对象一样。但是Session对象的特性与Application对象不同。Session对象变量只针对单一网页的使用者,这也就是说各个机器之间的Session的对象不尽相同。例如用户A和用户B,当用户A访问该Web应用时,应用程序可以显式的为该用户增加一个Session值,同时用户B访问该Web应用时,应用程序同样可以为用户B增加一个Sessi

21、on值。但是与Application不同的是,用户A无法存取用户B的Session值,用户B也无法存取用户A的Session值。Application对象终止于IIS服务停止,但是Session对象变量终止于联机机器离线时,也就是说当网页使用者关闭浏览器或者网页使用者在页面进行的操作时间超过系统规定时,Session对象将会自动注销。1Session对象的特性Session对象常用的属性有:q IsNewSession:如果用户访问页面时是创建新会话,则此属性将返回true,否则将返回false。q TimeOut:传回或设置Session对象变量的有效时间,如果在有效时间内有没有任何客户端动

22、作,则会自动注销。注意:如果不设置TimeOut属性,则系统默认的超时时间为20分钟。Session对象常用的方法有:q Add:创建一个Session对象。q Abandon:该方法用来结束当前会话并清除对话中的所有信息,如果用户重新访问页面,则可以创建新会话。q Clear:此方法将清除全部的Session对象变量,但不结束会话。注意:Session对象可以不需要Add方法进行创建,直接使用Session“变量名”=变量值的语法也可以进行Session对象的创建。2Session对象的使用Session对象可以使用于安全性相比之下较高的场合,例如后台登录。在后台登录的制作过程中,管理员拥有

23、一定的操作时间,而如果管理员在这段时间不进行任何操作的话,为了保证安全性,后台将自动注销,如果管理员需要再次进行操作,则需要再次登录。在管理员登录时,如果登录成功,则需要给管理员一个Session对象,示例代码如下所示。 protected void Button1_Click(object sender, EventArgs e) Sessionadmin = guojing;/新增Session对象 Response.Redirect(Session.aspx);/页面跳转 当管理员单击注销按钮时,则会注销Session对象并提示再次登录,示例代码如下所示。 protected void

24、Button2_Click(object sender, EventArgs e) Session.Clear();/删除所有Session对象 Response.Redirect(Session.aspx); 在Page_Load方法中,可以判断是否已经存在Session对象,如果存在Session对象,则说明管理员当前的权限是正常的,而如果不存在Session对象,则说明当前管理员的权限可能是错误的,或者是非法用户正在访问该页面,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) if (Sessionadmin !

25、= null)/如果Session“admin”不为空 if (String.IsNullOrEmpty(Sessionadmin.ToString()/则判断是否为空字符串 Button1.Visible = true;/显式登录控件 Button2.Visible = false;/隐藏注销控件 /Response.Redirect(admin_login.aspx);/跳转到登录页面 else Button1.Visible = false;/显式注销控件 Button2.Visible = true;/隐藏注销控件 上述代码当管理员没有登录时,则会出现登录按钮,如果登录了,存在Sess

26、ion对象,则登录按钮被隐藏,只显示注销按钮。其HTML代码如下所示。 上述代码运行后如图13-5和图13-6所示。 图13-5 登录前 图13-6 登录后当再次单击【注销】按钮时则会清空Session对象,再次返回登录窗口时会呈现同图13-5所示。13.1.5 Server服务对象Server对象是HttpServerUtility的一个实例,该对象提供对服务器上的方法和属性进行访问。1Server对象的常用属性Server对象的常用属性如下所示。q MachineName:获取远程服务器的名称。q ScriptTimeout:获取和设置请求超时。通过Server对象能够获取远程服务器的信息

27、,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) Response.Write(Server.MachineName);/输出服务器信息 上述代码运行后将会输出服务器名称,本例输出为“WIN-YXDGNGPG621”,这个输出结果根据服务器的名称不同而不同。2Server对象的常用方法Server对象的常用方法如下所示。q CreatObject:创建COM对象的一个服务器实例。q Execute:使用另一个页面执行当前请求。q Transfer:终止当前页面的执行,并为当前请求开始执行新页面。q HtmlDecod

28、e:对已被编码的消除Html无效字符的字符串进行解码。q HtmlEncode:对要在浏览器中显示的字符串进行编码。q MapPath:返回与Web服务器上的执行虚拟路径相对应的物理文件路径。q UrlDecode:对字符串进行解码,该字符串为了进行HTTP传输而进行编码并在URL中发送到服务器。q UrlEncode:编码字符串,以便通过URL从Web服务器到客户端浏览器的字符串传输。在ASP.NET中,默认编码是UTF-8,所以在使用Session和Cookie对象保存中文字符或者其他字符集时经常会出现乱码,为了避免乱码的出现,可以使用HtmlDecode和HtmlEncode方法进行编码

29、和解码。HTML页面代码如下所示。 HtmlDecode: HtmlEncode: 上述代码使用了两个文本标签控件用来保存并呈现编码后和解码后的字符串,在CS页面可以对字符串进行编码和解码操作,示例代码如下所示。 string str = (*_*) 嘻嘻;/声明字符串 Label1.Text = Server.HtmlEncode(str);/字符串编码 Label2.Text = Server.HtmlDecode(Label1.Text);/字符串解码上述代码将str字符串进行编码并存放在Label1标签中,Label2标签将读取Label1标签中的字符串再进行解码,运行后如图13-7所

30、示。图13-7 HtmlEncode和HtmlDecode在使用了HtmlEncode方法后,编码后的HTML标注会被转换成相应的字符,如符号“”会被转换成字符“<”。在进行解码时,相应的字符会被转换回来,并呈现在客户端浏览器中。当需要让浏览器能够接受HTML字符时,URL地址栏中对页面的参数的传递不能够包括空格,换行等符号,如果需要使用该符号,可以使用UrlEncode方法和UrlDecode方法进行变量的编码解码,示例代码如下所示。 protected void Button1_Click(object sender, EventArgs e) string str = Server

31、.UrlEncode(错误信息 n 操作异常);/使用UrlEncode进行编码 Response.Redirect(Server.aspx?str= + str);/页面跳转 在Page_Load方法中可以接收该字符串,示例代码如下所示。 if (Request.QueryStringstr != ) Label3.Text = Server.UrlDecode(Request.QueryStringstr);/使用UrlDecode进行解码 当长字符串跳转和密封的信息在页面中进行发送和传递时,可以使用UrlEncode方法和UrlDecode方法进行变量的编码解码,以提高应用程序的安全性。

32、3Server.MapPath方法在创建文件,删除文件或者读取文件类型的数据库时(如Access和SQLite),都需要指定文件的路径并显式的提供物理路径执行文件的操作,如D:Program Files。但是这样做却暴露了物理路径,如果有非法用户进行非法操作,很容易就显示了物理路径,这样就造成了安全问题。而如果在使用文件和创建文件时,如果非要为创建文件的保存地址设置一个物理路径,这样非常不便并且用户体验也不好。当用户需要上传文件时,用户不可能知道也不应该知道服务器路径。如果使用MapPath方法能够实现。MapPath方法以“/”开头,则返回Web应用程序的根目录所在的路径,若MapPath方

33、法以“./”开头,则会从当前目录开始寻找上级目录,如图13-8所示,而其实际服务器路径如图13-9所示。 图13-8 MapPath示意图 图13-9 服务器路径在图13-8所示,其中论坛根目录为root,在根目录下有一个文件夹为file1,在file1中的文件可以使用MapPath访问根目录中文件的方法有Server.MapPath(“./文件名称”)或Server.MapPath(“/文件名称”),示例代码如下所示。 string FilePath = Server.MapPath(./Default.aspx);/设置路径 string FileRootPath = Server.Map

34、Path(/Default.aspx);/设置路径Server.MapPath其实返回的是物理路径,但是通过MapPath的封装,通过代码无法看见真实的物理路径,若需要知道真实的物理路径,只需输出Server.MapPath即可,示例代码如下所示。 Response.Write(Server.MapPath(./Default.aspx);/输出路径上述代码输出结果为D:ASP.NET 3.5源代码第13章13-113-1Default.aspx,该结果针对不同的物理路径而不同。13.1.6 Cookie状态对象Session对象能够保存用户信息,但是Session对象并不能够持久的保存用户信

35、息,当用户在限定时间内没有任何操作时,用户的Session对象将被注销和清除,在持久化保存用户信息时,Session对象并不适用。1Cookie对象使用Cookie对象能够持久化的保存用户信息,相比于Session对象和Application对象而言,Cookie对象保存在客户端,而Session对象和Application对象保存在服务器端,所以Cookie对象能够长期保存。Web应用程序可以通过获取客户端的Cookie的值来判断用户的身份来进行认证。ASP.NET内包含两个内部的Cookie集合。通过HttpRequest的Cookies集合来进行访问,Cookie不是Page类的子类,所

36、以使用方法和Session和Application不同。相比于Session和Application而言,Cookie的优点如下所示。q 可以配置到期的规则:Cookie可以在浏览器会话结束后立即到期,也可以在客户端中无限保存。q 简单:Cookie是一种基于文本的轻量级结构,包括简单的键值对。q 数据持久性:Cookie能够在客户端上长期进行数据保存。q 无需任何服务器资源:Cookie无需任何服务器资源,存储在本地客户端中。虽然Cookie包括若干优点,这些优点能够弥补Session对象和Application对象的不足,但是Cookie对象同样有缺点,Cookie的缺点如下所示。q 大小

37、限制:Cookie包括大小限制,并不能无限保存Cookie文件。q 不确定性:如果客户端配置禁用Cookie配置,则Web应用中使用的Cookie将被限制,客户端将无法保存Cookie。q 安全风险:现在有很多的软件能够伪装Cookie,这意味着保存在本地的Cookie并不安全,Cookie能够通过程序修改为伪造,这会导致Web应用在认证用户权限时会出现错误。Cookie是一个轻量级的内置对象,Cookie并不能将复杂和庞大的文本进行存储,在进行相应的信息或状态的存储时,应该考虑Cookie的大小限制和不确定性。2Cookie对象的属性Cookie对象的属性如下所示:q Name:获取或设置C

38、ookie的名称。q Value:获取或设置Cookie的Value。q Expires:获取或设置Cookie的过期的日期和事件。q Version:获取或设置Cookie的符合HTTP维护状态的版本。3Cookie对象的方法Cookie对象的方法如下所示:q Add:增加Cookie变量。q Clear:清除Cookie集合内的变量。q Get:通过变量名称或索引得到Cookie的变量值。q Remove:通过Cookie变量名称或索引删除Cookie对象。4创建Cookie对象通过Add方法能够创建一个Cookie对象,并通过Expires属性设置 Cookie对象在客户端中所持续的时间

39、,示例代码如下所示。 HttpCookie MyCookie = new HttpCookie(MyCookie ); MyCookie.Value = Server.HtmlEncode(“我的Cookie应用程序”);/设置Cookie的值 MyCookie.Expires = DateTime.Now.AddDays(5);/设置Cookie过期时间 Response.AppendCookie(MyCookie);/新增Cookie上述代码创建了一个名称为MyCookie的Cookies,上述代码通过使用Response对象的AppendCookie方法进行Cookie对象的创建,与之相同,可以使用Add方法进行创建,示例代码如下所示。 Response.Cookies.Add(MyCookie);上述代码同样能够创建一个Cookie对象,当创建了Cookie对象后,将会在客户端的Cookies目录下建立文本文件,文本文件的内容如下所示。MyCookieMyCookie注意:Cookies目录在Windows下是隐藏目录,并不能直接对Cookies文件

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服