Download presentation
Presentation is loading. Please wait.
Published byΑκταίων Λιακόπουλος Modified 5年之前
2
1 Session对象的特性 6.1.4 Session 状态对象 Session 对象常用的方法有: Session 对象常用的属性有:
Add:创建一个 Session 对象。 Abandon:该方法用来结束当前会话并清除对话中的所有信息,如果用户重新访问页面,则可 以创建新会话。 Clear:此方法将清除全部的 Session 对象变量,但不结束会话。 IsNewSession:如果用户访问页面时是创建新会话,则此属性将返回 true,否则将返回 false。 TimeOut:传回或设置 Session 对象变量的有效时间,如果在有效时间内有没有任何客户端动作, 则会自动注销。 注意:Session 对象可以不需要 Add 方法进行创建,直接使用 Session[“变量名”]=变量值的语法也可 以进行 Session 对象的创建。 注意:如果不设置 TimeOut 属性,则系统默认的超时时间为 20 分钟。
3
2 Session对象的对象 6.1.4 Session 状态对象
protected void Button1_Click(object sender, EventArgs e) { Session["admin"] = "guojing"; Response.Redirect("Session.aspx"); } //新增 Session 对象 //页面跳转 当管理员单击注销按钮时,则会注销 Session 对象并提示再次登录,示例代码如下所示。 protected void Button2_Click(object sender, EventArgs e) { Session.Clear(); Response.Redirect("Session.aspx"); } //删除所有 Session 对象
4
Session 状态对象 在Page_Load方法中,可以判断是否已经存在Session对象,如果存在Session对象,则说明管理员 当前的权限是正常的,而如果不存在Session对象,则说明当前管理员的权限可能是错误的,或者是非法用户正在访问该页面,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) { if (Session["admin"] != null) 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[“admin”]不为空 //则判断是否为空字符串 //显式登录控件 //隐藏注销控件 //跳转到登录页面 //显式注销控件
5
Session 状态对象 上述代码当管理员没有登录时,则会出现登录按钮,如果登录了,存在 Session 对象,则登录按钮 被隐藏,只显示注销按钮。其 HTML 代码如下所示。 <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="登录" /> <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="注销" /> 上述代码运行后如图所示
6
1 Session对象的特性 6.1.5 Server 服务对象 MachineName:获取远程服务器的名称。
ScriptTimeout:获取和设置请求超时。 Server 对象的常用属性如右所示: 通过 Server 对象能够获取远程服务器的信息,示例代码如下所示 protected void Page_Load(object sender, EventArgs e) { Response.Write(Server.MachineName); } //输出服务器信息 上述代码运行后将会输出服务器名称,本例输出为“WIN-YXDGNGPG621”,这个输出结果根据 服务器的名称不同而不同。
7
2 Session对象的常用方法 6.1.5 Server 服务对象 Server 对象的常用方法如下所示。
CreatObject:创建 COM 对象的一个服务器实例。 Execute:使用另一个页面执行当前请求。 Transfer:终止当前页面的执行,并为当前请求开始执行新页面。 HtmlDecode:对已被编码的消除 Html 无效字符的字符串进行解码。 HtmlEncode:对要在浏览器中显示的字符串进行编码。 MapPath:返回与 Web 服务器上的执行虚拟路径相对应的物理文件路径。 UrlDecode:对字符串进行解码,该字符串为了进行 HTTP 传输而进行编码并在 URL 中发送到 服务器。 UrlEncode:编码字符串,以便通过 URL 从 Web 服务器到客户端浏览器的字符串传输。
8
Server 服务对象 在 ASP.NET 中,默认编码是 UTF-8,所以在使用 Session 和 Cookie 对象保存中文字符或者其他字 符集时经常会出现乱码,为了避免乱码的出现,可以使用 HtmlDecode 和 HtmlEncode 方法进行编码和解 码。HTML 页面代码如下所示。 <body> <form id="form1" runat="server"> <p> HtmlDecode: <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </p> HtmlEncode: <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> </form> </body>
9
Server 服务对象 上述代码使用了两个文本标签控件用来保存并呈现编码后和解码后的字符串,在 CS 页面可以对字 符串进行编码和解码操作,示例代码如下所示。 string str = "<p>(*^ ^*) 嘻嘻……</p>"; Label1.Text = Server.HtmlEncode(str); Label2.Text = Server.HtmlDecode(Label1.Text); //声明字符串 //字符串编码 //字符串解码 上述代码将 str 字符串进行编码并存放在 Label1 标签中,Label2 标签将读取 Label1 标签中的字符串 再进行解码,运行后如图所示。
10
在 Page_Load 方法中可以接收该字符串,示例代码如下所示
Server 服务对象 在使用了 HtmlEncode 方法后,编码后的 HTML 标注会被转换成相应的字符,如符号“<”会被转 换成字符“<”。在进行解码时,相应的字符会被转换回来,并呈现在客户端浏览器中。当需要让浏览器能够接受 HTML 字符时,URL 地址栏中对页面的参数的传递不能够包括空格,换行等符号,如果需要使用该符号,可以使用 UrlEncode 方法和 UrlDecode 方法进行变量的编码解码,示例代码如下所示。 protected void Button1_Click(object sender, EventArgs e) { string str = Server.UrlEncode("错误信息 \n 操作异常"); Response.Redirect("Server.aspx?str=" + str); } //使用 UrlEncode 进行编码 //页面跳转 在 Page_Load 方法中可以接收该字符串,示例代码如下所示 if (Request.QueryString["str"] != "") { Label3.Text = Server.UrlDecode(Request.QueryString["str"]); //使用 UrlDecode 进行解码 } 当长字符串跳转和密封的信息在页面中进行发送和传递时,可以使用 UrlEncode 方法和 UrlDecode方法进行变量的编码解码,以提高应用程序的安全性。
11
3 Server.MapPath 方法 6.1.5 Server 服务对象
在创建文件,删除文件或者读取文件类型的数据库时(如Access和SQLite),都需要指定文件的路径并显示的提供物理路径执行文件的操作,如 D:\Program Files。但是这样做却暴露了物理路径,如果有非法用户进行非法操作,很容易就显示了物理路径,这样就造成了安全问题。而如果在使用文件和创建文件时,如果非要为创建文件的保存地址设置一个物理路径,这样非常不便并且用户体验也不好。当用户需要上传文件时,用户不可能知道也不应该知道服务器路径。如果使用MapPath方法能够实现。MapPath方法以“/”开头,则返回Web应用程序的根目录所在的路径,若MapPath方法以“../”开头,则会从当前目录开始寻找上级目录,如图左所示,而其实际服务器路径如图右所示。
12
Server 服务对象 上图所示,其中论坛根目录为 root,在根目录下有一个文件夹为 file1,在 file1 中的文件可以 使用 MapPath 访问根目录中文件的方法有 Server.MapPath(“../文件名称”)或 Server.MapPath(“/文件名称”), 示例代码如下所示。 string FilePath = Server.MapPath("../Default.aspx"); string FileRootPath = Server.MapPath("/Default.aspx"); //设置路径 Server.MapPath 其实返回的是物理路径,但是通过 MapPath 的封装,通过代码无法看见真实的物理 路径,若需要知道真实的物理路径,只需输出 Server.MapPath 即可,示例代码如下所示。 Response.Write(Server.MapPath("../Default.aspx")); //输出路径 上述代码输出结果为 D:\ASP.NET 3.5\源代码\第 13 章\13-1\13-1\Default.aspx,该结果针对不同的物 理路径而不同。
13
1 Cookie对象 6.1.6 Cookie 状态对象 相比于 Session 和 Application 而言,Cookie的优点如下
不确定性:如果客户端配置禁用 Cookie 配置,则 Web 应用中使用的 Cookie 将被限制,客户端 将无法保存 Cookie。 安全风险:现在有很多的软件能够伪装 Cookie,这意味着保存在本地的 Cookie 并不安全,Cookie 能够通过程序修改为伪造,这会导致 Web 应用在认证用户权限时会出现错误。 Cookie 是一个轻量级的内置对象,Cookie 并不能将复杂和庞大的文本进行存储,在进行相应的信息 或状态的存储时,应该考虑 Cookie 的大小限制和不确定性。
14
2 Cookie对象的属性 3 Cookie对象的方法 6.1.6 Cookie 状态对象 Cookie 对象的属性如下所示:
Name:获取或设置 Cookie 的名称。 Value:获取或设置 Cookie 的 Value。 Expires:获取或设置 Cookie 的过期的日期和事件。 Version:获取或设置 Cookie 的符合 HTTP 维护状态的版本。 Add:增加 Cookie 变量。 Clear:清除 Cookie 集合内的变量。 Get:通过变量名称或索引得到 Cookie 的变量值。 Remove:通过 Cookie 变量名称或索引删除 Cookie 对象。
15
4 创建Cookie对象 6.1.6 Cookie 状态对象
通过Add方法能够创建一个Cookie对象,并通过Expires属性设置Cookie对象在客户端中所持续 的时间,示例代码如下 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目录 下建立文本文件,文本文件的内容如下所示。 My Cookie My Cookie 注意:Cookies 目录在 Windows 下是隐藏目录,并不能直接对 Cookies 文件夹进行访问,在该文件 夹中可能存在多个 Cookie 文本文件,这是由于在一些网站中进行登录保存了 Cookies 的原因。
16
5 获取Cookie对象 6.1.6 Cookie 状态对象
Web 应用在客户端浏览器创建 Cookie 对象之后,就可以通过 Cookie 的方法读取客户端中保存的Cookies信息,示例代码如下所示。 protected void Page_Load(object sender, EventArgs e) { try HttpCookie MyCookie = new HttpCookie("MyCookie "); MyCookie.Value = Server.HtmlEncode("我的 Cookie 应用程序"); MyCookie.Expires = DateTime.Now.AddDays(5); Response.AppendCookie(MyCookie); Response.Write("Cookies 创建成功"); Response.Write("<hr/>获取 Cookie 的值<hr/>"); HttpCookie GetCookie = Request.Cookies["MyCookie"]; Response.Write("Cookies 的值:" + GetCookie.Value.ToString() + "<br/>"); //创建 Cookie 对象 //Cookie 赋值 //Cookie 持续时间 //添加 Cookie //输出成功 //获取 Cookie //输出 Cookie 值 Response.Write("Cookies 的过期时间:" + GetCookie.Expires.ToString() + "<br/>"); } catch Response.Write("Cookies 创建失败"); //抛出异常
17
1 Cacha对象的属性 2 Cacha对象的方法 6.1.7 Cache 缓存对象
Count:获取存储在缓存中的 Cache 对象的项数。 Item:获取或设置指定外键的缓存项。 2 Cacha对象的方法 Add:将指定的项添加到 Cache 对象,该对象具有依赖项,过期和优先级策略,以及一个委托。 Get:从 Cache 对象检索指定项。 Remove:从应用程序的 Cache 对象移除指定项。 Insert:向 Cache 对象插入一个新项。
18
通过 Cache 的 Count 属性能够获取现有的 Cache 对象的项数,示例代码如下所示。
3 Cacha对象的使用 Cache 对象可以使用 Get 方法从相应的 Cache 对象中获取 Cache 对象的值,Get 方法能够通过 Cache对象的名称和索引来获取 Cache 对象的值,示例代码如下所示。 protected void Button1_Click(object sender, EventArgs e) { try Cache.Get("Label1.Text"); } catch Label2.Text = "获取 Cache 的值失败!"; //获取 Cache 对象的值 //捕获异常,同 try 使用 //输出错误异常信息 通过 Cache 的 Count 属性能够获取现有的 Cache 对象的项数,示例代码如下所示。 Response.Write("Cache 对象的项数有" + Cache.Count.ToString()); //输出 Cache 项数
19
1 创建Global.asax配置文件 6.1.7 Global.asax 配置
Global.asax 配置文件通常处理高级的应用程序事件,如 Application_Start 、 Application_End、 Session_Start 等,Global.asax 配置文件通常不为个别页面或事件进行请求相应。创建 Global.asax 配置文 件可以通过新建【全局应用程序类】文件来创建,如图 所示。 创建完成 Global.asax 配置文件,系统会自动创建一系列代码,开发人员只需要向相应的代码块中添 加事务处理程序即可。
20
2 应用域开始(Application_Start)和应用域结束( Application_End)事件
Global.asax 配置 2 应用域开始(Application_Start)和应用域结束( Application_End)事件 在Global.asax配置文件中,Application_Start 事件会在Application对象被创建时触发,通常Application_Start 对象能够对应用程序进行全局配置。在统计在线人数时,通过重写 Application_Start 方 法可以实现实时在线人数统计,示例代码如下所示。 protected void Application_Start(object sender, EventArgs e) { Application.Lock(); Application["start"] = "Application 对象被创建"; Application.UnLock(); } //锁定 Application 对象 //创建 Application 对象 //解锁 Application 对象 当用户使用Web应用时,就会触发Application_Start方法,而与之相反的是,Application_End事件在 Application 对象结束时被触发,示例代码如下所示。 protected void Application_End(object sender, EventArgs e) { Application.Lock(); Application["end"] = "Application 对象被销毁"; Application.UnLock(); } //锁定 Application 对象 //清除 Application 对象 //解锁 Application 对象
21
3 应用域错误(Application_Error)事件
Global.asax 配置 3 应用域错误(Application_Error)事件 Application_Error 事件在应用程序发送错误信息时被触发,通过重写该程序,可以控制 Web 应用程 序的错误信息或状态,示例代码如下所示。 protected void Application_Error(object sender, EventArgs e) { Application.Lock(); Application["error"] = "一个错误已经发生"; Application.UnLock(); } //锁定 Application 对象 //错误发生 //解锁 Application 对象
22
4 Session 开始(Session_Start)和 Session 结束(Session_End)事件
Global.asax 配置 4 Session 开始(Session_Start)和 Session 结束(Session_End)事件 与之相反的是 Session_End 事件,当 Session 对象结束时则会触发该事件,当使用 Session 对象统计 在线人数时,可以通过 Session_End 事件减少在线人数的统计数字,同时也可以对用户配置进行相关的 清理工作,示例代码如下所示。 Session_Start 事件在 Session 对象开始时被触发。通过 Session_Start 事件可以统计应用程序当前访问 的人数,同时也可以进行一些与用户配置相关的初始化工作,示例代码如下所示。 protected void Session_End(object sender, EventArgs e) { Session["count"] = null; Session.Clear(); } //设置 Session 为 null //清除 Session 对象 protected void Session_Start(object sender, EventArgs e) { Session["count"] = 1; } //Session 开始执行 注意:Session 对象和 Application 对象都能够进行应用程序中在线人数或应用程序统计的统计和计 算。在选择对象时,可以按照应用要求(特别是对象生命周期的要求)选择不同的内置对象。
Similar presentations