13.1 ASP.NET内置对象

  在ASP的开发中,这些内置对象已经存在,这些内置对象包括Response、Request、Application等,虽然ASP是一个可以称得上是“过时的”技术,但是在ASP.NET开发人员中依旧可以使用这些对象。这些对象不仅能够获取页面传递的参数,某些对象还可以保存用户的信息,如Cookie、Session等。

13.1.1 Request传递请求对象
  Request对象是HttpRequest类的一个实例,Request对象用于读取客户端在Web请求期间发送的HTTP值。Request对象常用的属性如下所示。
1)QueryString:获取HTTP查询字符串变量的集合。
2)Path:获取当前请求的虚拟路径。
3)UserHostAddress:获取远程客户端IP主机的地址。
4)Browser:获取有关正在请求的客户端的浏览器功能的信息。
1.QueryString:请求参数
  QueryString属性是用来获取HTTP查询字符串变量的集合,通过QueryString属性能够获取页面传递的参数。在超链接中,往往需要从一个页面跳转到另外一个页面,跳转的页面需要获取HTTP的值来进行相应的操作,例如新闻页面的news.aspx?id=1。为了获取传递过来的id的值,则可以使用Request的QueryString属性,示例代码如下所示。
+展开
-C#
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(Request.QueryString["id"]))//如果传递的ID值不为空
            {
                Label1.Text = Request.QueryString["id"];//将传递的值赋予标签中
            }
            else
            {
                Label1.Text = "没有传递的值";//提示没有传递的值
            }
            if (!String.IsNullOrEmpty(Request.QueryString["type"]))//如果传递的TYPE值不为空
            {
                Label2.Text = Request.QueryString["type"];//获取传递的TYPE值
            }
            else
            {
                Label2.Text = "没有传递的值";//无值时进行相应的编码
            }
        }

  上述代码使用Request的QueryString属性来接受传递的HTTP的值,当通过访问页面路径为“http://localhost:29867/Default.aspx”时,默认传递的参数为空,因为其路径中没有对参数的访问。而当访问的页面路径为“http://localhost:29867/Default.aspx?id=1&type=QueryString&action=get”时,就可以从路径中看出该地址传递了三个参数,这三个参数和值分别为id=1、type=QueryString以及action=get。
2.Path:获取路径
通过使用Path的方法可以获取当前请求的虚拟路径,示例代码如下所示。
+展开
-C#
Label3.Text = Request.Path.ToString();//获取请求路径

  当在应用程序开发中使用Request.Path.ToString()时,就能够获取当前正在被请求的文件的虚拟路径的值,当需要对相应的文件进行操作时,可以使用Request.Path的信息进行判断。
3.UserHostAddress:获取IP记录
通过使用UserHostAddress的方法,可以获取远程客户端IP主机的地址,示例代码如下所示。
+展开
-C#
Label4.Text = Request.UserHostAddress;//获取客户端IP

  在客户端主机IP统计和判断中,可以使用Request.UserHostAddress进行IP统计和判断。在有些系统中,需要对来访的IP进行筛选,使用Request.UserHostAddress就能够轻松的判断用户IP并进行筛选操作。
4.Browser:获取浏览器信息
通过使用Browser的方法,可以判断正在浏览网站的客户端的浏览器的版本,以及浏览器的一些信息,示例代码如下所示。
+展开
-C#
Label5.Text = Request.Browser.Type.ToString();//获取浏览器信息

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

13.1.2 Response请求响应对象
  Response对象是HttpResponse类的一个实例。HttpResponse类用户封装页面操作的HTTP响应信息。Response对象的常用属性如下所示。
1)BufferOutput:获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页面之后将其发送。
2)Cache:获取Web页面的缓存策略。
3)Charset:获取或设置输出流的HTTP字符集类型。
4)IsClientConnected:获取一个值,通过该值指示客户端是否仍连接在服务器上。
5)ContentEncoding:获取或设置输出流的HTTP字符集。
6)TrySkipIisCustomErrors:获取或设置一个值,指定是否支持IIS 7.0自定义错误输出。
1.Response常用属性
  BufferOutput的默认属性为True。当页面被加载时,要输出到客户端的数据都暂时存储在服务器的缓冲期内并等待页面所有事件程序,以及所有的页面对象全部被浏览器解释完毕后,才将所有在缓冲区中的数据发送到客户端浏览器,示例代码如下所示。
+展开
-C#
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("缓冲区清除前..");//输出缓冲区清除
        }

  上述代码在cs文件中重写了Page_Load事件,该事件用于中向浏览器输出一行字符串“缓冲区清除前”。在ASPX页面中,可以为页面增加代码以判断缓冲区的执行时间,示例代码如下所示。
+展开
-HTML
<body>
    <form id="form1" runat="server">
    <div>
    <% Response.Write("缓冲区被清除"); %> //输出字符串
    </div>
    </form>
</body>

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

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

  使用上述代码将指定BufferOutput的属性为False,在运行时缓冲区数据不会被Clear方法清除。
2.Response常用方法
  Response方法可以输出HTML流到客户端,其中包括发送信息到客户端和客户端URL重定向,不仅如此,Response还可以设置Cookie的值以保存客户端信息。Response的常用方法如下所示:
1)Write:向客户端发送指定的HTTP流。
2)End:停止页面的执行并输出相应的结果。
3)Clear:清除页面缓冲区中的数据。
4)Flush:将页面缓冲区中的数据立即显示。
5)Redirect:客户端浏览器的URL地址重定向。
  在Response的常用方法中,Write方法是最常用的方法,Write能够向客户端发送指定的HTTP流,并呈现给客户端浏览器,示例代码如下所示。
+展开
-C#
Response.Write("<div style=\"font-size:18px;\">这是一串<span style=\"color:red\">HTML</span>流</div>");
上述代码则会向浏览器输出一串HTML流并被浏览器解析.
  当希望在Response对象运行时,能够中途进行停止时,则可以使用End方法对页面的执行过程进行停止,示例代码如下所示。
+展开
-C#
            for (int i=0; i < 100; i++)//循环100次
            {
                if (i < 10)//判断i<10
                {
                    Response.Write("当前输出了第" + i + "行<hr/>");//i<10则输出i
                }
                else//否则停止输出
                {
                    Response.End();//使用了End方法停止执行
                }
            }

  上述代码循环输出HTML流“当前输出了第X行”,当输出到10行时,则停止输出。
  Redirect方法通常使用于页面跳转,示例代码如下所示。
+展开
-C#
Response.Redirect("http://www.shangducms.com"); //页面跳转

  执行上述代码,将会跳转到相应的URL。

13.1.3 Application状态对象
  Application对象是HttpApplication类的实例,将在客户端第一期从某个特定的ASP.NET应用程序虚拟目录中请求任何URL资源时创建。对于Web应用上的每个ASP.NET应用程序都要创建一个单独的实例。然后通过内部Application对象公开对每个实例进行引用。
1.Application对象的特性
对于Application对象有如下特性:
1)数据可以在Application对象之内进行数据共享,一个Application对象可以覆盖多个用户。
2)Application对象可以用Internet Service Manager来设置而获得不同的属性。
3)单独的Application对象可以隔离出来并运行在内存之中。
4)可以停止一个Application对象而不会影响到其他Application对象。
  Application对象常用的属性有:
1)AllKey:获取HttpApplicationState集合中的访问键。
2)Count:获取HttpApplicationState集合中的对象数。
  其中Application对象的常用方法有:
1)Add:新增一个Application对象变量。
2)Clear:清除全部的Application对象变量。
3)Get:通过索引关键字或变量名称得到变量的值。
4)GetKey:通过索引关键字获取变量名称。
5)Lock:锁定全部的Application对象变量。
6)UnLock:解锁全部的Application对象变量。
7)Remove:使用变量名称移除一个Application对象变量。
8)RemoveAll:移除所有的Application对象变量。
9)Set:使用变量名更新一个Application对象变量。
2.Application对象的使用
通过使用Application对象的方法,能够对Application对象进行操作,使用Add方法能够创建Application对象,示例代码如下所示。
+展开
-C#
            Application.Add("App""MyValue");//增加Application对象
            Application.Add("App1""MyValue1");//增加Application对象
            Application.Add("App2""MyValue2");//增加Application对象

  若需要使用Application对象,可以通过索引Application对象的变量名进行访问,示例代码如下所示:
+展开
-C#
Response.Write(Application["App1"].ToString());//输出Application对象

上述代码直接通过使用变量名来获取Application对象的值。通过Application对象的Get方法也能够获取Application对象的值,示例代码如下所示。
+展开
-C#
            for (int i = 0; i < Application.Count; i++)//遍历Application对象
            {
                Response.Write(Application.Get(i).ToString());//输出Application对象
            }

  Application对象通常可以用来统计在线人数,在页面加载后可以通过配置文件使用Application对象的Add方法进行Application对象的创建,当用户离开页面时,可以使用Application对象的Remove方法进行Application对象的移除。当Web应用不希望用户在客户端修改已经存在的Application对象时,可以使用Lock对象进行锁定,当执行完毕相应的代码块后,可以解锁。示例代码如下所示。
+展开
-C#
            Application.Lock();//锁定Application对象
            Application["App"] = "MyValue3";//Application对象赋值
            Application.UnLock(); //解锁Application对象

  上述代码当用户进行页面访问时,其客户端的Application对象被锁定,所以用户的客户端不能够进行Application对象的更改。在锁定后,也可以使用UnLock方法进行解锁操作。

13.1.4 Session状态对象
  Session对象是HttpSessionState的一个实例,Session是用来存储跨页程序的变量或对象,功能基本同Application对象一样。但是Session对象的特性与Application对象不同。Session对象变量只针对单一网页的使用者,这也就是说各个机器之间的Session的对象不尽相同。
  例如用户A和用户B,当用户A访问该Web应用时,应用程序可以显式的为该用户增加一个Session值,同时用户B访问该Web应用时,应用程序同样可以为用户B增加一个Session值。但是与Application不同的是,用户A无法存取用户B的Session值,用户B也无法存取用户A的Session值。Application对象终止于IIS服务停止,但是Session对象变量终止于联机机器离线时,也就是说当网页使用者关闭浏览器或者网页使用者在页面进行的操作时间超过系统规定时,Session对象将会自动注销。
1.Session对象的特性
Session对象常用的属性有:
1)IsNewSession:如果用户访问页面时是创建新会话,则此属性将返回true,否则将返回false。
2)TimeOut:传回或设置Session对象变量的有效时间,如果在有效时间内有没有任何客户端动作,则会自动注销。
  注意:如果不设置TimeOut属性,则系统默认的超时时间为20分钟。
  Session对象常用的方法有:
1)Add:创建一个Session对象。
2)Abandon:该方法用来结束当前会话并清除对话中的所有信息,如果用户重新访问页面,则可以创建新会话。
3)Clear:此方法将清除全部的Session对象变量,但不结束会话。
  注意:Session对象可以不需要Add方法进行创建,直接使用Session[“变量名”]=变量值的语法也可以进行Session对象的创建。
2.Session对象的使用
  Session对象可以使用于安全性相比之下较高的场合,例如后台登录。在后台登录的制作过程中,管理员拥有一定的操作时间,而如果管理员在这段时间不进行任何操作的话,为了保证安全性,后台将自动注销,如果管理员需要再次进行操作,则需要再次登录。在管理员登录时,如果登录成功,则需要给管理员一个Session对象,示例代码如下所示。
+展开
-C#
        protected void Button1_Click(object sender, EventArgs e)
        {
            Session["admin"] = "guojing";//新增Session对象
            Response.Redirect("Session.aspx");//页面跳转
        }

  当管理员单击注销按钮时,则会注销Session对象并提示再次登录,示例代码如下所示。
+展开
-C#
        protected void Button2_Click(object sender, EventArgs e)
        {
            Session.Clear();//删除所有Session对象
            Response.Redirect("Session.aspx");
        }

  在Page_Load方法中,可以判断是否已经存在Session对象,如果存在Session对象,则说明管理员当前的权限是正常的,而如果不存在Session对象,则说明当前管理员的权限可能是错误的,或者是非法用户正在访问该页面,示例代码如下所示。
+展开
-C#
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["admin"] != null)//如果Session[“admin”]不为空
            {
                if (String.IsNullOrEmpty(Session["admin"].ToString()))//则判断是否为空字符串
                {
                    Button1.Visible = true;//显式登录控件
                    Button2.Visible = false;//隐藏注销控件
                    //Response.Redirect("admin_login.aspx");//跳转到登录页面
                }
                else
                {
                    Button1.Visible = false;//显式注销控件
                    Button2.Visible = true;//隐藏注销控件
                }
            }
        }

  上述代码当管理员没有登录时,则会出现登录按钮,如果登录了,存在Session对象,则登录按钮被隐藏,只显示注销按钮。其HTML代码如下所示。
+展开
-HTML
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="登录" />
        <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="注销" />

上述代码运行后如图13-5和图13-6所示。
登录前
图13-5 登录前
登录后
图13-6 登录后
当再次单击【注销】按钮时则会清空Session对象,再次返回登录窗口时会呈现同图13-5所示。

13.1.5 Server服务对象
  Server对象是HttpServerUtility的一个实例,该对象提供对服务器上的方法和属性进行访问。
1.Server对象的常用属性
Server对象的常用属性如下所示。
1)MachineName:获取远程服务器的名称。
2)ScriptTimeout:获取和设置请求超时。
通过Server对象能够获取远程服务器的信息,示例代码如下所示。
+展开
-C#
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(Server.MachineName); //输出服务器信息
        }

  上述代码运行后将会输出服务器名称,本例输出为“WIN-YXDGNGPG621”,这个输出结果根据服务器的名称不同而不同。
2.Server对象的常用方法
  Server对象的常用方法如下所示。
1)CreatObject:创建COM对象的一个服务器实例。
2)Execute:使用另一个页面执行当前请求。
3)Transfer:终止当前页面的执行,并为当前请求开始执行新页面。
4)HtmlDecode:对已被编码的消除Html无效字符的字符串进行解码。
5)HtmlEncode:对要在浏览器中显示的字符串进行编码。
6)MapPath:返回与Web服务器上的执行虚拟路径相对应的物理文件路径。
7)UrlDecode:对字符串进行解码,该字符串为了进行HTTP传输而进行编码并在URL中发送到服务器。
8)UrlEncode:编码字符串,以便通过URL从Web服务器到客户端浏览器的字符串传输。
  在ASP.NET中,默认编码是UTF-8,所以在使用Session和Cookie对象保存中文字符或者其他字符集时经常会出现乱码,为了避免乱码的出现,可以使用HtmlDecode和HtmlEncode方法进行编码和解码。HTML页面代码如下所示。
+展开
-HTML
<body>
    <form id="form1" runat="server">
    <p>
        HtmlDecode:
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </p>
    <p>
        HtmlEncode:
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
    </p>
    </form>
</body>

  上述代码使用了两个文本标签控件用来保存并呈现编码后和解码后的字符串,在CS页面可以对字符串进行编码和解码操作,示例代码如下所示。
+展开
-C#
            string str = "<p>(*^__^*) 嘻嘻……</p>";//声明字符串
            Label1.Text = Server.HtmlEncode(str); //字符串编码
            Label2.Text = Server.HtmlDecode(Label1.Text); //字符串解码

  上述代码将str字符串进行编码并存放在Label1标签中,Label2标签将读取Label1标签中的字符串再进行解码。
  在使用了HtmlEncode方法后,编码后的HTML标注会被转换成相应的字符,如符号“<”会被转换成字符“<”。在进行解码时,相应的字符会被转换回来,并呈现在客户端浏览器中。当需要让浏览器能够接受HTML字符时,URL地址栏中对页面的参数的传递不能够包括空格,换行等符号,如果需要使用该符号,可以使用UrlEncode方法和UrlDecode方法进行变量的编码解码,示例代码如下所示。
+展开
-C#
        protected void Button1_Click(object sender, EventArgs e)
        {
            string str = Server.UrlEncode("错误信息 \n 操作异常"); //使用UrlEncode进行编码
            Response.Redirect("Server.aspx?str=" + str);//页面跳转
        }

  在Page_Load方法中可以接收该字符串,示例代码如下所示。
+展开
-C#
            if (Request.QueryString["str"] != "")
            {
                Label3.Text = Server.UrlDecode(Request.QueryString["str"]);//使用UrlDecode进行解码
            }

  当长字符串跳转和密封的信息在页面中进行发送和传递时,可以使用UrlEncode方法和UrlDecode方法进行变量的编码解码,以提高应用程序的安全性。
3.Server.MapPath方法
  在创建文件,删除文件或者读取文件类型的数据库时(如Access和SQLite),都需要指定文件的路径并显式的提供物理路径执行文件的操作,如D:\Program Files。但是这样做却暴露了物理路径,如果有非法用户进行非法操作,很容易就显示了物理路径,这样就造成了安全问题。
  而如果在使用文件和创建文件时,如果非要为创建文件的保存地址设置一个物理路径,这样非常不便并且用户体验也不好。当用户需要上传文件时,用户不可能知道也不应该知道服务器路径。如果使用MapPath方法能够实现。MapPath方法以“/”开头,则返回Web应用程序的根目录所在的路径,若MapPath方法以“../”开头,则会从当前目录开始寻找上级目录。

  其中论坛根目录为root,在根目录下有一个文件夹为file1,在file1中的文件可以使用MapPath访问根目录中文件的方法有Server.MapPath(“../文件名称”)或Server.MapPath(“/文件名称”),示例代码如下所示。
+展开
-C#
string FilePath = Server.MapPath("../Default.aspx"); //设置路径
string FileRootPath = Server.MapPath("/Default.aspx");//设置路径

Server.MapPath其实返回的是物理路径,但是通过MapPath的封装,通过代码无法看见真实的物理路径,若需要知  道真实的物理路径,只需输出Server.MapPath即可,示例代码如下所示。
+展开
-C#
Response.Write(Server.MapPath("../Default.aspx"));//输出路径

  上述代码输出结果为D:\ASP.NET 3.5\源代码\第13章\13-1\13-1\Default.aspx,该结果针对不同的物理路径而不同。

13.1.6 Cookie状态对象
  Session对象能够保存用户信息,但是Session对象并不能够持久的保存用户信息,当用户在限定时间内没有任何操作时,用户的Session对象将被注销和清除,在持久化保存用户信息时,Session对象并不适用。
1.Cookie对象
  使用Cookie对象能够持久化的保存用户信息,相比于Session对象和Application对象而言,Cookie对象保存在客户端,而Session对象和Application对象保存在服务器端,所以Cookie对象能够长期保存。Web应用程序可以通过获取客户端的Cookie的值来判断用户的身份来进行认证。
  ASP.NET内包含两个内部的Cookie集合。通过HttpRequest的Cookies集合来进行访问,Cookie不是Page类的子类,所以使用方法和Session和Application不同。相比于Session和Application而言,Cookie的优点如下所示。
1)可以配置到期的规则:Cookie可以在浏览器会话结束后立即到期,也可以在客户端中无限保存。
2)简单:Cookie是一种基于文本的轻量级结构,包括简单的键值对。
3)数据持久性:Cookie能够在客户端上长期进行数据保存。
4)无需任何服务器资源:Cookie无需任何服务器资源,存储在本地客户端中。
  虽然Cookie包括若干优点,这些优点能够弥补Session对象和Application对象的不足,但是Cookie对象同样有缺点,Cookie的缺点如下所示。
1)大小限制:Cookie包括大小限制,并不能无限保存Cookie文件。
2)不确定性:如果客户端配置禁用Cookie配置,则Web应用中使用的Cookie将被限制,客户端将无法保存Cookie。
3)安全风险:现在有很多的软件能够伪装Cookie,这意味着保存在本地的Cookie并不安全,Cookie能够通过程序修改为伪造,这会导致Web应用在认证用户权限时会出现错误。
  Cookie是一个轻量级的内置对象,Cookie并不能将复杂和庞大的文本进行存储,在进行相应的信息或状态的存储时,应该考虑Cookie的大小限制和不确定性。
2.Cookie对象的属性
  Cookie对象的属性如下所示:
1)Name:获取或设置Cookie的名称。
2)Value:获取或设置Cookie的Value。
3)Expires:获取或设置Cookie的过期的日期和事件。
4)Version:获取或设置Cookie的符合HTTP维护状态的版本。
3.Cookie对象的方法
  Cookie对象的方法如下所示:
1)Add:增加Cookie变量。
2)Clear:清除Cookie集合内的变量。
3)Get:通过变量名称或索引得到Cookie的变量值。
4)Remove:通过Cookie变量名称或索引删除Cookie对象。
4.创建Cookie对象
 通过Add方法能够创建一个Cookie对象,并通过Expires属性设置 Cookie对象在客户端中所持续的时间,示例代码如下所示。
+展开
-C#
            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方法进行创建,示例代码如下所示。
+展开
-C#

 Response.Cookies.Add(MyCookie);

  上述代码同样能够创建一个Cookie对象,当创建了Cookie对象后,将会在客户端的Cookies目录下建立文本文件,文本文件的内容如下所示。
MyCookie
MyCookie

  注意:Cookies目录在Windows下是隐藏目录,并不能直接对Cookies文件夹进行访问,在该文件夹中可能存在多个Cookie文本文件,这是由于在一些网站中进行登录保存了Cookies的原因。
5.获取Cookie对象
  Web应用在客户端浏览器创建Cookie对象之后,就可以通过Cookie的方法读取客户端中保存的Cookies信息,示例代码如下所示。
+展开
-C#
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                HttpCookie MyCookie = new HttpCookie("MyCookie ");//创建Cookie对象
                MyCookie.Value = Server.HtmlEncode("我的Cookie应用程序");//Cookie赋值
                MyCookie.Expires = DateTime.Now.AddDays(5);//Cookie持续时间
                Response.AppendCookie(MyCookie); //添加Cookie
                Response.Write("Cookies 创建成功");//输出成功
                Response.Write("<hr/>获取Cookie的值<hr/>");
                HttpCookie GetCookie = Request.Cookies["MyCookie"];//获取Cookie
                Response.Write("Cookies的值:" + GetCookie.Value.ToString() + "<br/>");//输出Cookie值
                Response.Write("Cookies的过期时间:" + GetCookie.Expires.ToString() + "<br/>");
            }
            catch
            {
                Response.Write("Cookies 创建失败");//抛出异常
            }
        }

  上述代码创建一个Cookie对象之后立即获取刚才创建的Cookie对象的值和过期时间。通过Request.Cookies方法可以通过Cookie对象的名称或者索引获取Cookie的值。
  在一些网站或论坛中,经常使用到Cookie,当用户浏览并登录在网站后,如果用户浏览完毕并退出网站时,Web应用可以通过Cookie方法对用户信息进行保存。当用户再次登录时,可以直接获取客户端的Cookie的值而无需用户再次进行登录操作。

13.1.7 Cache缓存对象
  Cache对象通过HttpContext对象的属性或Page对象的Cache属性来提供。Cache对于每个应用程序域均创建该类的实例,只要相应的应用程序域是激活状态,则该实例则为有效状态。
1.Cache对象的属性
  Cache对象的属性如下所示:
1)Count:获取存储在缓存中的Cache对象的项数。
2)Item:获取或设置指定外键的缓存项。
2.Cache对象的方法
  Cache对象的方法如下所示。
1)Add:将指定的项添加到Cache对象,该对象具有依赖项,过期和优先级策略,以及一个委托。
2)Get:从Cache对象检索指定项。
3)Remove:从应用程序的Cache对象移除指定项。
4)Insert:向Cache对象插入一个新项。
3.Cache对象的使用
  Cache对象可以使用Get方法从相应的Cache对象中获取Cache对象的值,Get方法能够通过Cache对象的名称和索引来获取Cache对象的值,示例代码如下所示。
+展开
-C#
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                Cache.Get("Label1.Text");//获取Cache对象的值
            }
            catch//捕获异常,同try使用
            {
                Label2.Text = "获取Cache的值失败!";//输出错误异常信息
            }
        }

  通过Cache的Count属性能够获取现有的Cache对象的项数,示例代码如下所示。
+展开
-C#
 Response.Write("Cache对象的项数有" + Cache.Count.ToString());//输出Cache项数


13.1.8 Global.asax配置
  Global.asax配置文件也称作ASP.NET应用程序文件,该文件是可选文件。该文件包含用于相应ASP.NET或HttpModule引发的应用程序级别事件的代码。Global.asax配置文件主流在基于ASP.NET应用程序的根目录中,在应用程序运行时,首先编译器会分析Global.asax配置文件并将其编译到一个动态生成的.NET Framework类,该类是从HttpApplication基类派生的。Global.asax配置文件不能够通过URL进行访问,以保证配置文件的安全性。
1.创建Global.asax配置文件
  Global.asax配置文件通常处理高级的应用程序事件,如Application_Start、Application_End、Session_Start等,Global.asax配置文件通常不为个别页面或事件进行请求相应。创建Global.asax配置文件可以通过新建【全局应用程序类】文件来创建。
  创建完成Global.asax配置文件,系统会自动创建一系列代码,开发人员只需要向相应的代码块中添加事务处理程序即可。
2.应用域开始(Application_Start)和应用域结束(Application_End)事件
  在Global.asax配置文件中,Application_Start事件会在Application对象被创建时触发,通常Application_Start对象能够对应用程序进行全局配置。在统计在线人数时,通过重写Application_Start方法可以实现实时在线人数统计,示例代码如下所示。
+展开
-C#
        protected void Application_Start(object sender, EventArgs e)
        {
            Application.Lock();//锁定Application对象
            Application["start"] = "Application对象被创建";//创建Application对象
            Application.UnLock(); //解锁Application对象
        }

  当用户使用Web应用时,就会触发Application_Start方法,而与之相反的是,Application_End事件在Application对象结束时被触发,示例代码如下所示。
+展开
-C#
        protected void Application_End(object sender, EventArgs e)
        {
            Application.Lock(); //锁定Application对象
            Application["end"] = "Application对象被销毁";//清除Application对象
            Application.UnLock(); //解锁Application对象
        }

  当用户离开当前的Web应用时,就会触发Application_End方法,开发人员能够在Application_End方法中清理相应的用户数据。
3.应用域错误(Application_Error)事件
  Application_Error事件在应用程序发送错误信息时被触发,通过重写该程序,可以控制Web应用程序的错误信息或状态,示例代码如下所示。
+展开
-C#
        protected void Application_Error(object sender, EventArgs e)
        {
            Application.Lock(); //锁定Application对象
            Application["error"] = "一个错误已经发生";//错误发生
            Application.UnLock(); //解锁Application对象
        }

4.Session开始(Session_Start)和Session结束(Session_End)事件
  Session_Start事件在Session对象开始时被触发。通过Session_Start事件可以统计应用程序当前访问的人数,同时也可以进行一些与用户配置相关的初始化工作,示例代码如下所示。
+展开
-C#
        protected void Session_Start(object sender, EventArgs e)
        {
            Session["count"] = 1;//Session开始执行
        }

  与之相反的是Session_End事件,当Session对象结束时则会触发该事件,当使用Session对象统计在线人数时,可以通过Session_End事件减少在线人数的统计数字,同时也可以对用户配置进行相关的清理工作,示例代码如下所示。
+展开
-C#
        protected void Session_End(object sender, EventArgs e)
        {
            Session["count"] = null;//设置Session为null
            Session.Clear();//清除Session对象
        }

  上述代码当用户离开页面或者Session对象生命周期结束时被触发,在Session_End中可以清除用户信息进行相应的统计操作。
  注意:Session对象和Application对象都能够进行应用程序中在线人数或应用程序统计的统计和计算。在选择对象时,可以按照应用要求(特别是对象生命周期的要求)选择不同的内置对象。

加支付宝好友偷能量挖...


评论(0)网络
阅读(177)喜欢(0)Asp.Net/C#/WCF