Download presentation
Presentation is loading. Please wait.
1
本章要点: 掌握HttpRequest对象的应用。 掌握HttpResponse对象的应用。
掌握HttpServerUtility对象的应用,理解不 同方法的页面重定向。 掌握跨页面提交的应用。了解ViewState、 HiddenField,掌握Cookie、Session、 Application、Profile的应用。
2
目录 6.1 HTTP请求 6.2 HTTP响应 6.3 HttpServerUtility 6.4 跨页面提交 6.5 状态管理
6.1 HTTP请求 6.2 HTTP响应 6.3 HttpServerUtility 6.4 跨页面提交 6.5 状态管理 ViewState HiddenField控件 Cookie Session Application Profile 6.6 小结
3
6.1 HTTP请求 ASP.NET 4.5通过Page类的Request属性能很好地控制 请求数据,如访问客户端的浏览器信息、查询字符 串、Cookie等信息。 实际上,Page类的Request属性值是一个HttpRequest 对象,它封装了HTTP请求信息。
4
HttpRequest对象的数据集合对应表
说明 QueryString 从查询字符串中读取用户提交的数据 Cookies 获得客户端的Cookie数据 ServerVariables 获得服务器端或客户端的环境变量信息 Browser 获得客户端浏览器信息
5
6.1 HTTP请求(续) 在使用HttpRequest对象时,常通过Page类的 Request属性调用,所以要获取HttpRequest对 象的Browser数据集合的语法格式常写为: Request.Browser。 利用QueryString数据集合获得的查询字符串是 指跟在URL后面的变量及值,它们以“?”与URL 间隔,不同的变量之间以“&”间隔。
6
实例6-1 利用QueryString在页面间传递数据信息
在本实例中,当单击QueryString1.aspx页面上 链接后,页面被重定向到QueryString2.aspx; 在页面QueryString2.aspx中显示从 QueryString1.aspx传递过来的查询字符串数据 信息。 源程序:QueryString1.aspx 源程序:QueryString2.aspx
7
6.1 HTTP请求(续) 利用ServerVariables数据集合可以很方便地获 取服务器端或客户端的环境变量信息,如客户 端的IP地址等。 语法格式为:Request.ServerVariables["环境 变量名"]。
8
常用的环境变量表 环境变量名 说明 LOCAL_ADDR 服务器端的IP地址 PATH_TRANSLATED 当前页面在服务器端的物理路径
REMOTE_ADDR 客户端IP地址 REMOTE_HOST 客户端计算机名 SERVER_NAME 服务器端计算机名 SERVER_PORT 服务器端网站的端口号
9
6.1 HTTP请求(续) Browser数据集合用于返回用户的浏览器类型、 版本等信息,以便根据不同的浏览器编写不同 的页面。
6.1 HTTP请求(续) Browser数据集合用于返回用户的浏览器类型、 版本等信息,以便根据不同的浏览器编写不同 的页面。 语法格式为:Request.Browser["浏览器特性名 "]。
10
浏览器特性名对应表 名称 说明 Browser 浏览器类型 Version 浏览器版本号 MajorVersion 浏览器主版本号
MinorVersion 浏览器次版本号 Cookies 逻辑值,true表示支持Cookie JavaScript 逻辑值,true表示支持JavaScript ActiveXControls 逻辑值,true表示支持ActiveX控件
11
实例6-2 利用ServerVariables和Browser返回服务器端和客户端信息
源程序:Request.aspx 注意:本实例是在VSEW 2012中浏览 Request.aspx后的效果图,因此,服务器端和 客户端的IP地址都为本机地址。其中,“::1” 表示IPv6格式的本机地址。一旦将网站发布到 安装IIS 7.5的Web服务器后,再从其他的客户 端访问页面将看到不同的地址。
12
6.2 HTTP响应 ASP.NET 4.5通过Page类的Response属性可以很 好地控制输出的内容和方式,如页面重定向、 保存Cookie等。 实际上,Response属性值是一个HttpResponse 对象。
13
HttpResponse对象的常用属性和方法表
成员 说明 Cookies属性 添加或修改客户端的Cookie AppendToLog()方法 将自定义日志信息添加到IIS日志文件中 End()方法 终止页面的执行 Redirect()方法 页面重定向,可通过URL附加查询字符串实现不同页面之间的数据传递 Write()方法 在页面上输出信息
14
实例6-3 利用Write()方法输出XHTML文本
利用Write()方法除可以输出提示信息、变量值 外,还可以输出XHTML文本或JavaScript脚本等。 源程序:Write.aspx
15
程序说明 for循环执行完后向浏览器输出的XHTML文本如 下:
<p style="font-size:10px">我喜欢 ASP.NET!</p> <p style="font-size:14px">我喜欢 ASP.NET!</p> <p style="font-size:18px">我喜欢 ASP.NET!</p> 其中,“"”的输出需要转义符\,即在源程序中 必须写成“\"”。
16
实例6-4 利用Redirect()方法重定向页面
在本实例中,选择“教师”后单击“确定”按 钮,页面将被重定向到教师页面Teacher.aspx。 源程序:Redirect.aspx 源程序:Teacher.aspx
17
6.3 HttpServerUtility 在ASP.NET 4.5中,Page类的Server属性封装了 服务器端的一些操作,如将XHTML元素标记转换 为字符实体、获取页面的物理路径等。 实际上,Server属性值是一个 HttpServerUtility对象。
18
HttpServerUtility对象的常用属性和方法
ScriptTimeOut属性:设置页面执行的最长时间, 单位为秒。 Execute()方法:停止执行当前页面,转到并且 执行新页面,执行完毕后返回原页面,继续执 行后续语句。 HtmlEncode()方法:将字符串中的XHTML元素标 记转换为字符实体,如将“<”转换为<。 MapPath()方法:获取页面的物理路径。
19
HttpServerUtility对象的常用属性和方法(续)
Transfer()方法:停止执行当前页面,转到并 且执行新页面,执行完毕后不再返回原页面。 UrlEncode()方法:将字符串中某些特殊字符转 换为URL编码,如将“/”转换为“%2f”,空格 转换为“+”。
20
Response.Redirect()、Server.Execute()和Server.Transfer()的区别
Redirect()方法尽管在服务器端执行,但重定 向实际发生在客户端,可从浏览器地址栏中看 到地址变化;而Execute()和Transfer()方法的 重定向实际发生在服务器端,在浏览器的地址 栏中看不到地址变化。 Redirect()和Transfer()方法执行完新页面后, 并不返回原页面;而Execute()方法执行完新页 面后会返回原页面继续执行。
21
Response.Redirect()、Server.Execute()和Server.Transfer()的区别(续)
Redirect()方法可重定向到同一网站的不同页 面,也可重定向到其它网站的页面;而 Execute()和Transfer()方法只能重定向到同一 网站的不同页面。 利用Redirect()方法在不同页面之间传递数据 时,状态管理采用查询字符串形式;而 Execute()和Transfer()方法的状态管理方式与 Button类型控件的跨页面提交方式相同。
22
实例6-5 运用HttpServerUtility对象
实例6-5 运用HttpServerUtility对象 Server.HtmlEncode()方法常用于在页面上输出 XHTML元素。 Server.UrlEncode()常用于处理URL地址,如地 址中包含空格等。 在本实例中,单击Student.aspx链接时将丢失 “张”后面的信息。单击 Student.aspx(UrlEncode)链接时,因使用了 Server.UrlEncode()方法不再丢失“张”后面 的信息。 源程序:Server.aspx
23
6.4 跨页面提交 利用Button类型控件实现跨页面提交是另一种实现 页面重定向的方法。
6.4 跨页面提交 利用Button类型控件实现跨页面提交是另一种实现 页面重定向的方法。 需要将源页面上Button类型控件的PostBackUrl属 性值设置为目标页面路径。而在目标页面上,需要 PreviousPageType指令,并设置 VirtualPath属性值为源页面路径。 在目标页面上访问源页面中数据的方法有两种:一 是利用PreviousPage.FindControl()方法访问源页 面上的控件;二是先在源页面上定义公共属性,再 在目标页面上利用“PreviousPage.属性名”获取 源页面中数据。
24
跨页面提交与调用Server.Execute()或Server.Transfer()方法的区别
如果是跨页面提交,那么IsCrossPagePostBack 属性值为true;如果是调用Server.Execute() 或Server.Tranfer()方法,那么 IsCrossPagePostBack属性值为false。
25
实例6-6 运用跨页面提交技术 在Cross1.aspx中输入用户名、密码后单击“确 定”按钮,将通过跨页面提交技术重定向到 Cross2.aspx,并且显示在Cross1.aspx中输入 的数据信息。 源程序:Cross1.aspx 源程序:Cross2.aspx
26
6.5 状态管理 客户端状态管理:将状态数据保存在客户端计算机 上,当客户端向服务器端发送请求时,状态数据会 随之发送到服务器端。可选择ViewState、 ControlState、HiddenField、Cookie和查询字符 串。 服务器状态管理:将状态数据保存在服务器上。可 选择Session状态、Application状态或数据库形式。 客户端状态不消耗服务器内存资源,但容易泄露数 据信息。而服务器端状态将消耗服务器端内存资源, 但具有较高的安全性。
27
ViewState 又称为视图状态,用于维护Web窗体自身的状态。 当用户请求ASP.NET 4.5页面时,ASP.NET 4.5 将ViewState封装为一个或几个隐藏的表单域传 递到客户端。当用户再次提交页面时, ViewState也将被提交到服务器端。这样后续的 请求就可以获得上一次请求时的状态。 可在客户端浏览ASP.NET 4.5页面时,选择“查 看”→“源文件”命令进行查看。 EnableViewState属性:值为False可实现禁用 ViewState的目的。
28
6.5.2 HiddenField控件 又称隐藏域,用于维护Web窗体自身的状态。
不会显示在用户的浏览器中,但可以像设置标 准控件的属性那样设置其属性。 成员主要有Value属性和ValueChanged事件。 注意:要触发ValueChanged事件,需设置 HiddenField控件的EnableViewState属性值为 False。
29
6.5.3 Cookie 保存在客户端硬盘或内存中的一小段文本信息, 如网站、用户、会话等有关的信息。 与网站关联,而不是与特定的页面关联。
可以在客户端修改Cookie设置和禁用Cookie。 当用户的浏览器关闭了对Cookie的支持,但又 要使用Cookie时,只需在Web.config文件的 <system.web>元素中加入以下语句: <sessionState cookieless="AutoDetect">或 <sessionState cookieless="UseUri">
30
Cookie(续) 在Windows 7操作系统中,Cookie文本文件存储 于 “%userprofile%\AppData\Roaming\Microsoft \ Windows\Cookies”文件夹。 提供System.Web.HttpCookie类来处理Cookie, 常用的属性是Value和Expires。
31
建立Cookie 方法一: Response.Cookies["Name"].Value="张三"; 方法二:
HttpCookie cookie = new HttpCookie("Name"); cookie.Value = "张三"; cookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(cookie);
32
获取Cookie Request.Cookies.["Name"].Value
33
实例6-7 利用Cookie限制页面访问 在本实例中,用户访问Cookie.aspx时,若在 Cookie中已有用户信息则显示欢迎信息,否则 被重定向到CookieLogin.aspx。这意味着当 Cookie中未包含用户信息时,就不能访问 Cookie.aspx,实现了限制页面访问的目的。 源程序:Cookie.aspx 源程序:CookieLogin.aspx
34
程序说明 测试时先浏览Cookie.aspx,此时因无用户名 Cookie信息,页面被重定向到 CookieLogin.aspx,输入用户名和密码后单击 “确定”按钮将用户名存入Cookie。关闭浏览 器。再次浏览Cookie.aspx可看到欢迎信息。
35
6.5.4 Session 又称会话状态,常用于存储用户信息、多页面 间的信息传递、购物车等。 产生在服务器端,只能为当前访问的用户服务。
以用户对网站的最后一次访问开始计时,当计 时达到会话设定时间并且期间没有访问操作时, 则会话自动结束。 如果同一个用户在浏览期间关闭浏览器后再访 问同一个页面,服务器会为该用户产生新的 Session。
36
6.5.4 Session(续) 用一个唯一的Session ID来标识每一个会话。
若客户端支持Cookie,则将Session ID保存到 相应的Cookie中;若不支持,就将Session ID 添加到URL中。 注意:不管Session ID保存在Cookie还是添加 在URL中,都是明文。如果需要保护Session ID, 可考虑采用HTTPS通信。 Session由System.Web.HttpSessionState类实 现。
37
HttpSessionState常用的属性和方法表
说明 Contents属性 获取对当前会话状态对象的引用 Mode属性 获取当前会话状态的模式 SessionID属性 获取会话的唯一标识 TimeOut属性 获取或设置会话状态持续时间,单位为分钟,默认为20分钟 Abandon()方法 取消当前会话 Remove()方法 删除会话状态集合中的项
38
Session_Start()和Session_End()方法
包含于Global.asax文件中。 Session_Start()方法中代码在新会话启动时会 自动被执行。 Session_End()方法中代码在会话结束时会自动 被执行。 注意: 只有Web.config 文件中的 sessionState 模式设置为InProc时,才会执行 Session_End()方法代码。如果会话模式设置为 StateServer或SQLServer,则不会执行 Session_End()方法代码。
39
Session的赋值 方法一: Session["Name"]="张三"; 方法二:
Session.Contents["Name"]="张三"; 注意:Session使用的名称不区分大小写,因此 不要用大小写区分不同的Session变量。
40
Session的存储方式 在Web.config中通过<sessionState>元素的 mode属性来指定。
共有Off、InProc、StateServer、SQLServer和 Custom五个枚举值供选择,分别代表禁用、进 程内、独立的状态服务、SQLServer和自定义数 据存储。 在实际工程项目中,一般选择StateServer,而 对于大型网站常选用SQLServer。
41
实例6-8 利用Session限制页面访问 本实例功能类似于实例6-7,但适用于客户端已 禁用Cookie的情况。
利用本实例能限制对Session.aspx的访问,即 首先要通过登录认证才能访问该页面。 源程序:Session.aspx 源程序:SessionLogin.aspx
42
程序说明 当用户直接访问Session.aspx时,会判断 Session["Name"]状态值,若为空,则被重定向 到SessionLogin.aspx,否则显示欢迎信息。 在SessionLogin.aspx中用户登录成功后,将建 立Session["Name"]状态值。此时要测试是否存 在Session["Name"]状态值,应在浏览 SessionLogin.aspx页面的浏览器中直接更改地 址来访问Session.aspx。
43
6.5.5 Application 又称应用程序状态,应用于所有的用户。
由System.Web.HttpApplicationState类来实现。 要修改Application状态值时,首先要调用 Application.Lock()方法锁定Application状态, 值修改后再调用Application.Unlock()方法解 除锁定。 Application_Start()、Application_End()、 Application_Error()方法包含于Global类。
44
实例6-9 统计网站在线人数 本实例呈现网站在线人数。
实例6-9 统计网站在线人数 本实例呈现网站在线人数。 考虑三个方面:初始化计数器;当一个用户访 问网站时,计数器增1;当一个用户离开网站时, 计数器减1。 源程序:Global.asax 源程序:Application.aspx
45
程序说明 可同时利用多个浏览器或多台计算机访问 Application.aspx,进行测试。当然,若通过 多台计算机进行测试,需要先将网站复制到IIS 7.5。 注意:Session_End()方法代码只有到达 TimeOut属性设置的时间时才被执行,所以关闭 浏览器不会立即调用该方法。
46
6.5.6 Profile 用户个性化配置功能可以很方便地为每个用户 定义、存储和管理配置信息。 会自动识别不同的匿名用户。
默认情况下,配置信息以ASPNETDB.mdf数据库 名存储于网站的App_Data文件夹。 使用“%windir%\Microsoft.NET\Framework\ v ”文件夹中的aspnet_regsql.exe命 令行工具可将配置信息保存到其他版本的SQL Server中。
47
用户个性化配置过程 第一,在Web.config文件中的<profile>元素中 定义配置信息名、数据类型、是否允许匿名用 户存储信息等。 第二,在程序中利用Profile对象访问用户个性 化信息。
48
实例6-10 利用Profile存取匿名用户的邮政编码信息
在本实例中,当某匿名用户输入邮编,单击 “写入”按钮把邮编保存到ASPNETDB.mdf数据 库的aspnet_Profile表中。单击“显示”按钮 从aspnet_Profile表中获取该匿名用户的邮编 并显示在页面上。 源程序: Web.config 源程序:Profile.aspx
49
程序说明 由于在Web.config文件中添加了用户个性化配 置信息,所以浏览Profile.aspx时ASP.NET 4.5 会在网站的App_Data文件夹中自动建立默认的 ASPNETDB.mdf数据库。另外,不需要访问数据 库的语句,直接通过Profile对象即可保存或获 取存储于aspnet_Profile表中的用户个性化信 息。 注意:将包含Profile.aspx的网站发布到IIS 7.5后,由于从不同的计算机访问Profile.aspx 将生成不同的匿名用户标识,故不能共享存储 的邮编。
50
6.6 小结 HttpRequest提供了QueryString、 ServerVariables、Browser、Cookies等数据集合 来访问不同用途的数据。 HttpResponse提供了输出XHTML文本、JavaScript 脚本、Cookie等功能。 为了有效防范SQL脚本注入,常会使用 HttpServerUtility对象的HtmlEncode()方法,该 对象同时提供了UrlEncode()、MapPath()等实用方 法。 页面重定向可采用<a>元素、HyperLink、 Response.Redirect()、Server.Execute()、 Server.Transfer()和Button类型控件的跨页面提 交等形式,在使用时要注意它们的区别。
51
6.6 小结(续) 状态管理分为客户端和服务器端两种管理形式。 客户端形式使用较多的是Cookie和查询字符串, 服务器端形式包含Session、Application和数 据库等。其中,Session对应单个用户,而 Application对应所有用户。 若要实现个性化网站,需要配置Web.config和 使用Profile对象。
Similar presentations