690 likes | 796 Views
1 、熟知 Response 对象的有关属性和方法及 Cookies 集,熟练掌握其功能和用法 2 、熟知 Request 对象的属性和集合 3 、熟知 Server 对象的属性和方法 4 、熟练掌握 Session 对象和 Application 对象的属性和方法; 5 、掌握在 global.asa 文件中使用 Session 和 Application 对象的属性、方法、事件等; 教学重点 1 、利用 Response 对象和 Cookies 集合来控制和管理由服务器发送到浏览器的数据;
E N D
1、熟知Response对象的有关属性和方法及Cookies集,熟练掌握其功能和用法1、熟知Response对象的有关属性和方法及Cookies集,熟练掌握其功能和用法 2、熟知Request对象的属性和集合 3、熟知Server对象的属性和方法 4、熟练掌握Session对象和Application对象的属性和方法; 5、掌握在global.asa文件中使用Session和Application对象的属性、方法、事件等; 教学重点 1、利用Response对象和Cookies集合来控制和管理由服务器发送到浏览器的数据; 2、利用Request对象获得表单所提交的数据、Cookie的值以及服务器环境变量的值; 教学难点 在global.asa文件中使用Application对象和Session对象。
客户端经常要向服务器提交信息,比如我们在网上注册一个电子邮箱,客户端在Web页面上填写好相关信息后,单击“提交”按钮,此时系统会自动完成将填写的数据提交到服务器端,并返回一定的信息。那如何实现数据的收集和交互信息的显示呢?客户端经常要向服务器提交信息,比如我们在网上注册一个电子邮箱,客户端在Web页面上填写好相关信息后,单击“提交”按钮,此时系统会自动完成将填写的数据提交到服务器端,并返回一定的信息。那如何实现数据的收集和交互信息的显示呢?
一、Request对象 客户端经常要向服务器提交信息,比如注册电子邮箱,客户端在Web页面上填写好相关信息后,单击“提交”按钮,系统会自动完成将填写的数据提交到服务器端。 利用Request对象可以轻松实现数据收集功能。 Requset对象用于使服务器获取从客户端浏览器提交或者上传的信息。包括以下获取内容:
1、Request对象的属性 Request对象只有一种属性--TotalBytes属性,该属性用来取得从客户端接收的所有数据的字节大小。其引用格式为: Variable=Request.TotalBytes 该属性很少在ASP页面中应用,因为更关心的是一些特定的值,而不是整个请求字符串。 2、Request对象的方法 只提供一种方法--BinaryRead方法。该方法用来取得HTML表单的源内容,利用它可以以二进制码的方式读取客户端的POST数据。它的返回值是一个数组,该方法需要一个参数,即每次读取的字节的大小。其引用格式为: Variable数组= Request.BinaryRead(count) 由于与Form集合抵触,所以程序中若参考了Form集合,就不能再使用BinaryRead方法。同样,若调用了BinaryRead方法,也不能再使用Form集合。
3、Request对象的集合 Form集合:使用Form集合可以得到表单以POST方式提交的数据。POST方式将表单中的数据打包成一块后以文件的形式提交给服务器,因此所提交的数据是不限定长度的。 Querystring集合:使用Querystring集合可以得到以GET方式提交的数据。GET方式将表单中的数据直接附加到URL地址栏的后面提交给服务器,因此限定了数据的长度。 ServerVariables集合:在浏览器中浏览Web页面时使用的传输协议是HTTP,在HTTP标题文件中会记录一些客户端的信息,有时服务器还需要根据不同的客户端信息做出不同的反映,这时就要用ServerVariables集合来获取所需信息。ServerVariables集合用于得到系统的环境变量。 Cookies集合:Cookie是一种标记,由Web服务器嵌入用户浏览器中来标识用户。Cookies方法在网络上使用的非常广泛,使用它,服务器可以在每次访问的客户机上留下一个“印记”,当下次该客户机再次访问服务器时,服务器就可以通过读取客户机上的Cookie,达到“记忆”的效果。从另一个角度来讲,使用Cookies方法也减轻了服务器的许多负担,本来需要在服务器上数据库中或文件中保留的数据,此时只要存储在客户机上。
二、Response对象 1、Response对象的属性 用来控制向客户端浏览器发送数据。用户可以使用该对象将服务器端的数据用超文本的格式发送到用户端浏览器,包括直接发送数据给浏览器、重定向浏览器到另一个URL或设置Cookies的值等。Request对象与Response对象可以说是一对孪生兄弟,一个负责收集,一个负责输出。Response对象的语法结构为: Response [.集合| 属性| 方法 ]
2、Response对象的方法 Response对象的许多功能是通过其方法来实现的。
3、Response对象的集合 Response只有一个集合:Cookies。前面提及过Cookie及Request.Cookies集合,它们用来提取存储在客户计算机Cookie中的值。而Response对象的Cookies集合用来设置Cookie的值,若指定的Cookie不存在,则在客户机上创建;若存在,则设置新的值并将原值删除。其引用的一般格式为: Response.Cookies("变量名") =写入的信息
4、验证用户口令字 以下实例借助Response的Buffer属性、End及Write方法,完成当用户输入的口令字不等于“123456”时,则服务器停止处理脚本,并在客户端浏览器中输出“密码错误!”字样。 <form action="4-11.asp" method="post"> 请输入口令字:<input type="text" name="password"> <input type="submit" value="提交"> </form> <% dim pwd response.buffer=true '设置服务器缓冲为true pwd=request.form("password") if pwd<>"123456" then response.write("密码错误") response.end '使Web服务器停止处理脚本 end if '否则密码正确,执行以下语句 response.write("你输入的口令为:" & pwd) %>
三、应用程序会话管理 1、供全体应用程序使用的Application对象 Application对象是一个应用程序级的对象。 作用: (1) 可以使用Application对象定义变量,该变量类似于一般的程序设计语言中所谓的“全局变量”。用此变量保存的信息,在同一ASP程序中的所有用户可共享此信息(如聊天室中,某人说一句话,全体人可看见)。 (2) 所保存的信息,在服务器运行期间可永久性保存(如网页计数器,自动记录页面浏览的次数)。 (3) 控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件(如可设置在同一时刻仅限一人访问)。 Application对象只有一个Value属性,其引用的一般格式为: Application(“变量名")= 值
Application对象的两个方法: Application.Lock与Application.UnLock。 用来处理多个用户对存储在Application对象中的数据进行写入的问题。在常见的电子商务网站中,容易出现这样一种冲突情况:两个或者多个用户同时修改同一个目标,如数据库中的某条记录或某个Application变量。使用Application.Lock可以确保在某一时段所有连接到服务器的用户之中只有一个能获得存取或修改某公共变量(如一个Application变量和对象)的权限,即对该公共变量进行锁定操作。其他任何用户想要获得这样的权限就必须等当前权限用户结束其锁定或者当前ASP程序终止执行。解除锁定的方法是Application.Unlock。在完成修改公共变量的目的以后,应当及时释放当前拥有的存取和修改的权利,以便别的用户进行请求。 引用格式为: Application.Lock Application.Unlock
两个事件: Application_Onstart和Application_Onend。 Application_Onstart事件在创建与服务器的首次会话之前发生,当服务器启动并且允许用户请求时就触发该事件。 Application_Onend事件与Application_Onstart事件相反,它在整个ASP程序退出之后发生,一般用来回收一些Application变量以节省服务器资源。 一般格式为: <script language=VBScript RUNAT=server> Sub Application_Onstart() ….. End Sub Sub Application_Onend() …… End Sub </script> 处理Application_Onstart事件与Application_Onend的代码不是放在普通的ASP文件中,而是放在服务器根目录下的一个叫Global.asa文件中。
内容回顾 Request对象: 从客户端获取用户信息 Response对象:将数据送出到客户端 例如:注册
客户机 服务器
客户机 从客户端获取数据 服务器 传送所填写的个人信息 request response 反馈给用户信息 将数据送到客户端 执行处理逻辑: (接受客户端传来的各参数: 张三 11111 男 音乐 计算机)
Request对象: Form集合 QueryString集合 ServerVariables集合 Response对象: Write方法 Redirect方法 End方法
问题的引入 注册页面 登录页面 主页 问题:用户从一个页面转到另一个页面时,在下一页面中如 何记载用户的信息?
根据以往的经验: • 利用超链接。 将信息附在超链接后面以生成查询字符串,通过检索request对象的querystring集合,实现信息的传递(从一页传到另一页) • 向客户端浏览器写入Cookie 。 利用response对象的cookies来保存信息到本地硬盘,再用request对象的cookies来读取信息。
2、特定用户会话使用的Session对象 目标: • 对Session对象的理解 • Session对象的属性、方法 两个属性: SessionID:存储用户的SessionID信息。 Timeout:Session 的有效期。 一个方法: Abandon:清除Session 对象。 • Session对象的应用
Session信息 页面1 页面2 页面3 • 对Session的理解 • 用来记载特定用户的信息,实现多个页面信息共享。 示意图:
启动Session 将SessionID存放到Cookies中 送回SessionID • Session 工作原理 客户机 服务器 磁盘 产生SessionID
再送出HTTP请求 到客户端检查SessionID • Session 工作原理 客户机 服务器 磁盘
发送SessionID信息 返回SessionID对应的信息 • Session 工作原理 客户机 服务器 磁盘 返回
当用户开始访问某个网页时,服务器会自动产生一个Session ID,并把这个Session ID送给客户端浏览器,浏览器把这个Session ID存放在Cookies内。当用户再次向服务器送出HTTP请求时,ASP会去检查申请表头的Session ID ,并返回该Session ID对应的Session信息。
实例:输出SessionID的值到浏览器 (使用SessionID 属性) 1.asp: <% Response.Write Session.SessionID %> <br> <a href=“2.asp”>下一页</a> 2.asp: <% Response.Write Session.SessionID %> <br>
思考: 1. 运行1.asp页面,再点击链接进入2.asp页面,浏览器分别输出什么? 2. 如果在1.asp页面刷新一下,浏览器输出什么?为什么? 3. 关闭所有的浏览器窗口后,再运行2.asp页面,浏览器输出什么?为什么? 解答: 1. 运行1.asp时,浏览器输出:1031426129 点击“下一页”链接,运行2.asp时,浏览器仍输出:1031426129 2. 浏览器仍输出:1031426129 ,可以理解为一个窗口一个用户。 3. 1031426130 因为启动了一个新的会话。
此例说明: 1. Session对象的建立时间。 当一个用户打开一个应用程序的某页时,就会建立一个Session对象,可以保存该用户的信息。 2. 会话 从用户启动IE访问某个页面开始,意味着一个会话的开始,直到关闭IE窗口为止,意味着一个会话的结束。(在此过程中,无论用户是在本窗口内打开一个新的页面,还是在子窗口内打开一个新的页面,都还是同一个Session对象。) 但如果用户又从桌面上打开了另外一个浏览器窗口,也访问这个应用程序中的某个页面,这时就建立了两个独立的Session对象,就像两个用户一样。
Session对象的两个属性: (1) SessionID属性 SessionID属性用于返回用户的会话标识,即前面提到的由服务器生成的在会话期间内惟一标识用户的一个字符串。每次用户产生一个新的请求,请求服务器的ASP页面时,服务器都会验证这个用户的SessionID。SessionID的值是一行9位的数字。 (2) Timeout属性–session对象的有效期 单位:分钟 系统默认值:20分钟 如果用户在有效期内一直没有和服务器交互,那么超过规定的时间,该session对象就失效,保存在Session对象中的信息也就失效了。
Session对象永不过期的做法:强制用户不停地和服务器交互。Session对象永不过期的做法:强制用户不停地和服务器交互。 <meta http-equiv=“refresh” content=“900”> 如何将生存期修改为 60 分钟?Session.Timeout = 60 Session对象只有一种方法——Abandon。此方法用于清除存储在Session中的所有对象和变量,释放系统资源。如果不使用Abandon方法,系统将一直等到Session超时才将Session中的对象和变量清除。 如何利用程序清除 Session 对象?Session.Abandon ()
Session对象的两个事件:Session__OnStart和Session_OnEnd。同样,这两个事件的脚本文档应放在global.asa中。Session对象的两个事件:Session__OnStart和Session_OnEnd。同样,这两个事件的脚本文档应放在global.asa中。 (1) Session_OnStart事件 Session_OnStart事件是在服务器创建一个新会话时发生。服务器在执行请求的页之前先处理该脚本。因此,可以在其中定义所有在页面中需要使用的Session变量,也可以在其中定义任何内置对象的实例,如Application、Server、Request和Response等。 (2) Session_OnEnd事件 当程序中调用了Session对象的Abandon方法时或者Session对象的Timeout属性超时时,Session_OnEnd事件被触发。一般在Session_OnEnd事件中清理一些系统对象或变量的值,释放系统资源。在该事件中,只能使用3种内置对象:Application,Server和Session。
Session对象的应用 • 利用Session存储信息的语法格式 语法: Session(“Session名字”)=变量或字符串信息 例如:<% Session(“user_name”)= “张三” Session(“age”)=23 Session(“school”)=hisschool ‘hisschool为变量 %> 解释:创建的同时赋值,以后再赋值就是更改Session变量的值了。
应用实例 建立两个页面,验证Session变量的值 页面1: (1.asp) <% Session(“Greeting”)=“欢迎”‘定义Session变量的值 Response.Write(Session(“Greeting”)) ’输出Session变量的值 %> <br> <a href=“2.asp">下一页</a> 页面2:(2.asp) <% Response.Write(Session(“Greeting”)) ‘输出Session变量的值 %>
思考: 1. 直接运行2.asp页面,浏览器输出什么? 2. 先运行1.asp页面,再点击链接进入2.asp,浏览器分别输出什么? 3. 修改1.asp的“欢迎!”为“早上好”,再运行2.asp,浏览器输出什么? 4. 在第4步基础上,先运行1.asp,再点击链接进入2.asp,浏览器分别 输出什么? 解答: 1. 浏览器空白.因为Session("Greeting")没有赋值,其值为空。 2. 浏览器分别输出:欢迎! 3. 浏览器输出:欢迎! 原因:虽然更改了4-17.asp页面的赋值语句, 但该页面没有被运行,Session (“Greeting”)的值没有改变。 4. 浏览器分别输出:早上好
Session 对象与Application对象的区别: 相同点是都可以用来存储一些用户信息。 不同点如下表:
在电子商务网站中常利用Session对象实现“购物车”。用户可以在不同页面选择不同的商品,所有的商品货号、价格等信息都可以保留在Session对象中,直到用户去收银台交款或者取消购物,Session对象中的数据才被清除或者设置为超时状态。而另一个用户进来时,系统又会重新分配一台“购物车”,重新保存于一个Session对象中。在电子商务网站中常利用Session对象实现“购物车”。用户可以在不同页面选择不同的商品,所有的商品货号、价格等信息都可以保留在Session对象中,直到用户去收银台交款或者取消购物,Session对象中的数据才被清除或者设置为超时状态。而另一个用户进来时,系统又会重新分配一台“购物车”,重新保存于一个Session对象中。
最初的问题: 用户在登录页面输入自己的用户名,在其他页面还需要使用该用户名,如何记住该用户名呢? 登录页面 A.asp 主页B.asp
解决方案: 1. 在表单处理代码中:获取用户的输入(用户名),然后保存到Session中,以便在其它页面中实现信息共享。 2. 在第二个页面中读取Session信息,并显示欢迎信息或其它主页内容。
表单处理代码 登录页面A.asp
思考: 1. 本例中可以输入任意的用户名和密码,目的是为了在下一页面显示而已。 若想要限制用户输入正确的用户名和密码,怎么办? 2. 本例中若用户不通过登录程序,也可以直接运行主页,从而存在一定的安全 隐患。若强制用户必须经过登录页面才能运行其他页面,如何更改代码? 解答: 1. 若用户必须输入正确的用户名和密码才能进入下一页面,此时就要 用到数据库知识,这会在第七章中学到。 2. 可在主页的代码前面增加如下代码: <% if Session(“user_name”)=“” then response.Redirect(“a.asp") end if %>
如果用户没有登录就直接访问第二页,将用户重定向回第一页如果用户没有登录就直接访问第二页,将用户重定向回第一页 第二个页面B.asp
更多应用 1.复杂的注册/登录模块 (LOG文件夹) 2.网上购物 (SHOP文件夹)
重点 利用Session存储信息的应用 难点 1. Session对象的工作原理 2. Session对象与Application对象的区别
思考 如果客户端浏览器不支持Cookies,那么能支持Session吗? 练习 上机调试本节课所有示例,并认真体会SessionID的工作原理。 请编写一个含登录页面的聊天室,并能在聊天室中显示出是谁的发言。比如:张三说:…….
3、如何使用Global.asa文件 • Global.asa文件是一个可选文件,开发者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。该文件的内容不是显示给用户的,而是用来存储事件信息和由应用程序全局使用的对象。 • 文件名必须是Global.asa • 可放在应用程序的根目录下,也可以放到任何子目录下。一旦创建此文件,则会对其目录下的所有文件产生作用。 • Global.asa文件只能包含如下内容:<Object>声明、应用程序事件和会话事件。 • 当用户请求启动应用程序并创建新的会话时,首先触发的是Application_Onstar事件,然后才是Session_Onstart事件。当用户当前所有请求处理完之后,服务器首先对每个会话调用Session_Onend事件,删除所有的活动会话,然后调用Application_Onend事件关闭应用程序。
四、服务器信息的Server对象 Server对象提供了访问和使用服务器的方法与属性接口。 通过Server对象属性和方法的使用,可以达到对服务器对象的使用和访问服务器的信息。服务器提供一系列的对象模型,如数据库连接组件Adodb,其访问模型有连接数据库Connection,记录集Recordset等。通过Server对象创建一个这样的对象模型的实例,然后才能使用。有了Server对象,就可以在服务器上启动ActiveX组件。 Server对象的语法结构: Server.属性|方法(变量或字符串|=整数)
Server对象只有一个属性——ScriptTimeout,该属性用于设置Web服务器响应一个网页请求所需要的时间。如果脚本超过该时间限度还没有执行,它将被中止,并提交超时错误。该属性单位是“秒”,默认值为90秒。 Server对象的方法及方法所表示的意义如表所示:
一 、案例背景 • 网上聊天是Internet上的热门应用 • 背景知识: Request对象: 获取用户信息 Response对象:将信息送到浏览器 Session对象: 存储一个普通用户滞留期间的用户信息 Application对象: 存储一个应用程序中所有用户共享的信息