《ASP系列教程第8课Request对象及其使用》由会员分享,可在线阅读,更多相关《ASP系列教程第8课Request对象及其使用(72页珍藏版)》请在金锄头文库上搜索。
1、8.1 课前导读8.2 课堂教学8.3 上机练习8.4 课后作业第8课 Request对象及其使用 1 18.1 课前导读 输入、处理和输出是所有程序设计语言的基本模式,ASP作为一种类程序设计语言也不例外。在ASP中,Request和Response对象分别完成输入和输出的大部分功能,是ASP技术中非常重要的两个对象: Response对象:用来访问服务器端所创建的并发回到客户端的响应信息,包括直接发送信息给浏览器、重定向浏览器到另一个URL或设置cookie的值。它也提供了一系列的方法用来创建输出,例如无处不在的Response.Write方法。2 2 Request对象:为脚本提供了当客
2、户端请求一个页面或者传递一个窗体时,客户端提供的全部信息。这包括能指明浏览器和用户的HTTP变量,在这个域名下存放在浏览器中的cookie,任何作为查询字符串而附于URL后面的字符串或页面的段中的HTML控件的值。也提供使用SecureSocketLayer(SSL)或其他加密通信协议的授权访问,及有助于对连接进行管理的属性。 值得一提的是:虽然Request对象的属性与方法各有一个,比Response对象的9个属性8种方法少了许多,但Request对象的集合确有5种,除Cookies集合与Response对象的Cookies集合相对应外,新增的4种集合大大丰富了Request对象获取输入信息
3、的能力。3 38.2 课堂教学 8.2.1 Request对象概述 8.2.2 ASP与表单的交互 8.2.3 使用Form集合 8.2.4 使用Querystring集合 8.2.5 使用Cookies集合 8.2.6 使用ClientCertificate集合4 48.2.1 Request对象概述 1. Request对象的集合 2. Request对象的属性 3. Request对象的方法 4. Request对象的使用5 58.2.1 Request对象概述 Request 对象是负责从客户端浏览器获取用户信息的对象。它是ASP中重要的服务器内置对象,它连接着Web服务器和Web客户
4、端程序。利用Request对象可以接收基于HTTP请求的所有用户信息,如用Post方法或Get方法传送来的参数以及Cookie和Server Variable等等。6 61. Request对象的集合 Request对象提供了5个集合,可以用来获取客户端对Web服务器请求的各类信息,其说明见表8-1。表8-1 Request对象的集合及说明集合名称集合名称说明说明ClientCertificClientCertificateate当客当客户户端端访问访问一个一个页页面或其他面或其他资资源源时时,用来向服,用来向服务务器表明身份器表明身份的客的客户证书户证书的所有字段或条目的数的所有字段或条目的
5、数值值集合,每个成集合,每个成员员均是只均是只读读CookiesCookies根据用根据用户户的的请请求,用求,用户户系系统发统发出的所有出的所有cookiecookie的的值值的集合,的集合,这这些些CookieCookie仅对仅对相相应应的域有效,每个成的域有效,每个成员员均均为为只只读读FormFormMETHODMETHOD的属性的属性值为值为POSTPOST时时,所有作,所有作为请为请求提交的求提交的段段中的中的HTMLHTML控件控件单单元的元的值值的集合,每个成的集合,每个成员员均均为为只只读读QueryStringQueryString依附于用依附于用户请户请求的求的URLUR
6、L后面的名称数后面的名称数值对值对或者作或者作为请为请求提交求提交的且的且METHODMETHOD属性属性值为值为GET(GET(或者省略其属性或者省略其属性) )的,或的,或中所有中所有HTMLHTML控件控件单单元的元的值值,每个成,每个成员员均均为为只只读读ServerVariablServerVariableses随同客随同客户户端端请请求求发发出的出的HTTPHTTP报头值报头值,以及,以及WebWeb服服务务器的几种器的几种环环境境变变量的量的值值的集合,每个成的集合,每个成员员均均为为只只读读 在这些集合之中,最常使用的是Form、Cookies和QueryString集合。7
7、72. Request对象的属性 Request对象唯一的属性是TotalBytes,它提供关于用户请求的字节数量的信息:返回由客户端发出的请求信息的字节数。使用中通常关注客户端各项请求信息的值而非整个请求字符串,因此该属性很少被用于ASP页。3. Request对象的方法 Request对象唯一的方法是BinaryRead,它允许访问从用户页面段中传递给服务器的请求信息的完整内容。其语法格式为:Request.BinaryRead(count)Request.BinaryRead(count)8 8 说明: count表示当数据作为POST请求的一部分发往服务器时,从客户请求中获得数据的字节
8、数。 该方法返回一个Variant数组(或者SafeArray)。 如果ASP代码已经引用了Request.Form集合,这个方法就不能再用。同样,如果用了BinaryRead方法,也不能再访问Request.Form集合。9 94. Request对象的使用 在ASP中,当客户端请求一个页面或传递一个表单时,Request对象为脚本提供了客户端浏览器所提供的全部信息,包括用户请求的所有信息、用户为该域名存放在浏览器下的Cookie、使用Secure Socket Layer(SSL)或其它加密通信协议的授权访问以及对连接进行管理的属性等。Request对象可以利用集合、属性、方法等来进行参数
9、的传递。其语法格式为:Request. Request. 集合集合 | | 属性属性 | | 方法方法 ( ( 变量量 ) )1010 Request对象中有5个集合可以用来完成客户端对ASP服务器的请求的响应。实际上Request对象是由一群对象的集合组成,在引用客户端页面定义的变量时,有多种方法可以使用。例如,要在Request对象的Form中取得名为“姓名”的信息,可以使用下述赋值命令:name=Request.Form(name=Request.Form(姓名姓名) 也可以不指定集合名(Form),直接使用命令:name=Request(name=Request(姓名姓名) 程 序 会
10、 以 QueryString、 Form、 Cookies和ServerVariables的顺序搜索所有集合,当发现一个匹配的变量时,就认定它是要引用的成员。当然,编程实践中,为避免不同集合中同名变量引用的二义性,最好显式地指定集合。11118.2.2 ASP与表单的交互 在动态网页设计中,表单是必不可少的元素,许多功能的实现都与表单密不可分。表单的主要功能是接受用户填写在表单中的文字、选择项等内容,在HTTP的POST方法之后,由客户端浏览器将信息发送到服务器端。 由表单接受用户输入的信息一般要按照程序预设的逻辑判断进行检查,这种检查根据需要可以在客户端或服务器端进行。客户端的逻辑判断一般与
11、表单放在一个页面内,常适用于较为简单的判断;服务器端的逻辑判断只能由表单内action属性所指向的ASP网页来完成,由于服务器端有功能更为强大的对象模型,能实现更为复杂的逻辑判断,因此适用于复杂的逻辑判断。1212 网页中的表单与集合Form是两个不同的概念,虽然它们的英文名称相同。表单的功能是在客户端接受用户的输入信息,是在客户端由浏览器解释的HTML标记,而集合Form则是在服务器端的一种数据结构。一般情况下,客户端表单的信息在执行网页的Post方法后,在服务器端Request对象的Form集合中会有相应的量与之对应。1313 在HTML网页中,表单以标记开始和结束。表单标记的语法格式为:
12、FORM method= action= URL 其中 “URL”设置表单处理程序的相对或绝对位置(若要将表单数据寄到电子邮件信箱,可以设置该电子邮件信箱的URL;若没有设置Action属性的值,表示使用默认的表单处理程序); “传送方式”用于指明交互表单的信息传送方式,有Post和Get两种。1414 其他属性及其说明见表8-2。表8-2 表单的其他属性说明属性名属性名说明说明accept-charsetaccept-charset设设置表置表单单数据的字符数据的字符编码编码方式,服方式,服务务器依据器依据该该属性指定的字符属性指定的字符编码编码方式方式处处理表理表单单数据。字符数据。字符编
13、码编码方式定方式定义义于于RFC2045RFC2045,中,中间间以逗号隔开以逗号隔开acceptaccept设设置作置作为为服服务务器器处处理表理表单单数据的数据的MimeMime类类型型enctypeenctype设设置将表置将表单单数据返回服数据返回服务务器器时时所采取的所采取的编码编码方式,默方式,默认值为认值为application/x-application/x-,若您允,若您允许浏览许浏览者上者上传传文件文件给给服服务务器,那么器,那么ENCTYPEENCTYPE的的值须为值须为Multipart/Form-DataMultipart/Form-Data;若要将表;若要将表单单数
14、据寄到数据寄到电电子子邮邮件信箱,那么件信箱,那么enctypeenctype的的值值可可为为Text/PlainText/Plain。namename设设置表置表单单的名称的名称( (限英文限英文) ),此名称可供,此名称可供ScriptScript使用。使用。targettarget设设置用来置用来显显示表示表单处单处理程序理程序结结果的目果的目标标框架。框架。 在 表 单 中 可 以 使 用 、 、 、 等控件来定义表单信息项,参见第6课。1515 单击表单中的“Submit”控件,将触发表单的提交事件:onSubmit;单击表单中的“Reset”控件,将触发表单的重置事件:onRese
15、t。 使用表单传送信息的方式通常有下述三种: 由HTML网页中的表单传送信息给处理该信息的ASP文件; 由ASP文件中的表单传送信息给另一个ASP文件,后者处理该信息; 在ASP文件中的表单所传送的信息由其自身进行处理。 其中第3种方式效率较高,但编程较复杂。1616 【例8-1】ASP与表单的交互。 使用HTML网页中表单输入并提交信息,网页文件名为8_1.htm,其代码如下: 利用表单输入信息 请输入 姓名: 性别:男 女 1717 当用户在浏览器中输入表单数据并单击“提交”按钮后,服务器端的表单处理程序8_1_1.asp可以利用Request对象读取浏览器端的数据并返回相应信息。表单处理
16、程序8_1_1.asp的代码如下: 使用Request对象获得表单信息 欢迎您登录本站点 如不对,返回 1818 上例可以改为使用一个ASP文件传送和处理信息。 【例8-2】表单所传送的信息由其所在的ASP文件自身进行处理。 代码如下: 利用表单输入信息 ASP与表单的交互% xm=Request.Form(姓名) xb=Request.Form(性别) if xm then Response.write 欢迎登录本站点, Response.write 您是 & xm if xb =男 then Response.write 大侠 else Response.write 侠女 end if R
17、esponse.write 如不对,返回 Response.end end if%1919 请输入 姓名: 性别:男 女 20208.2.3 使用Form集合 当使用表单的Post方式提交数据时,表单中的数据被保存在Request对象的Form集合中。使用Form集合来传递数据的语法格式如下:Request.Form(element)(index)|.Count 其中,element为Form集合所要检索的表单元素(控件)名称;Index用于指定表单元素多个值中的某一个,当然此表单元素有多个值时此项才有意义;Count用于指定表单某元素的值的个数。21211. 读取Form集合中特定元素对象的
18、值2. 读取Form集合中所有元素对象的值3. 读取Form集合的某元素对象的特定值4. 读取Form集合的某元素对象的全部参数值 22221. 读取Form集合中特定元素对象的值 【例8-3】读取Form集合中特定元素对象的值。 首先建立一个输入数据的HTML表单文件8_3.htm,其代码如下: 输入数据的表单 输入数据的表单 姓名: 性别:男 女 密码: 爱好: 音乐 汽车 钓鱼 集邮 绘画2323 学历: 小学 中学 大专 本科 研究生 生活格言: 单击“提交”按钮,调用表单处理程序8_3.asp将用户输入的信息传递给服务器,经处理后反馈给用户,显示结果。2424 文件8_3.asp的代
19、码如下: Request对象的Form集合示例 Request对象的Form集合示例 欢迎您登录本站点% Response.write(您的姓名是: & Request.Form(xm) & ) Response.write(您的性别是: & Request.Form(xb) & ) Response.write(您的密码是: & Request.Form(mm) & ) Response.write(您的爱好是: & Request.Form(ah) & ) Response.write(您的学历是: & Request.Form(xl) & ) Response.write(您的生活格言是
20、:) Response.Write Request.Form(adage)&%这些信息对吗?如不对,返回25252. 读取Form集合中所有元素对象的值 上面介绍了如何传递Form集合中特定元素对象的值,下面介绍如何读取Form集合中所有元素对象的值。 【例8-4】在例8-3中使用循环语句读取Form集合中所有元素对象的值。 有两种循环语句可以读取Form集合中所有元素对象的值。2626 使用“For each In”循环语句,将文件8_3.asp的代码改为: 用For each In语句读取Form集合示例 用For each In语句读取Form集合示例 欢迎您登录本站点% For eac
21、h Item in Request.Form Response.Write(Item&:) Response.Write(Request.Form(Item)&) Next% 这些信息对吗? 如不对,返回 2727 使用“Fornext”循环语句,将文件8_3.asp的代码改为: 用Fornext语句读取Form集合示例 Fornext语句读取Form集合示例 欢迎您登录本站点% For I=1 to Request.Form.count Response.Write(Request.Form(I)&) Next% 这些信息对吗? 如不对,返回 这种方法不能得到对象的名称,显示结果如图8-4所
22、示。28283. 读取Form集合的某元素对象的特定值 当Form集合中的元素对象具有多个值时(如checkbox、select等控件对象),欲读取某个特定的参数可以使用Index来读取。 【例8-5】读取Form集合的某个多值元素的特定值。输入数据的HTML表单文件8_5.htm同8_3.htm,表单处理程序8_5.asp的代码如下: 读取Form集合的某个多值元素的特定参数值 读取Form集合的某个多值元素的特定参数值 欢迎您登录本站点% Response.Write(Request.Form(xm)&的第二爱好是:) Response.Write(Request.Form(ah)(1)&
23、)% 这些信息对吗? 如不对,返回 运行结果 29294. 读取Form集合的某元素对象的全部参数值 与读取Form集合中所有元素对象的值一样,也可以采用两种循环语句来读取Form集合的某元素对象的全部参数值。以Fornext循环为例。 【例8-6】读取Form集合的某元素对象的全部参数值,如图8-6所示。 输入数据的HTML表单文件8_6.htm同8_3.htm,表单处理程序8_6.asp的代码如下:3030 读取Form集合的某元素对象的全部参数值 读取Form集合的某元素对象的全部参数值 欢迎您登录本站点% For I=1 to Request.Form(爱好).count Respon
24、se.Write(Request.Form(xm)&的第&I&爱好是:) Response.Write(Request.Form(ah)(I)&) Next% 这些信息对吗? 如不对,返回 程序运行结果。 说明:在利用Form集合读取参数时,与之相对应的HTML页面中的表单的Method属性一定要设置成Post才行,否则将无法读取参数。31318.2.4 使用Querystring集合 Querystring集合是Request对象中最常用的另外一个集合,与Form集合不同,Querystring集合读取参数时,HTML表单的Method应设置成Get。 除 了 读 取 表 单 对 象 传 递
25、 的 参 数 之 外 ,Querystring集合还可以通过读取HTTP查询字符串中的参数值来传递参数。使用Querystring集合的语法格式如下:Request.Querystring(Request.Querystring(变量量)(index)|.Count)(index)|.Count 其中,“变量”为在HTTP查询字符串中指定要检索的变量名称;Index用于检索变量多个值中的某一个,当然此变量有多个值时此项才有意义;Count用于指定Querystring中某变量值的个数。32328.2.4 使用Querystring集合1. 利用Querystring集合读取 表单的参数2. 利
26、用Querystring集合读取 HTTP查询字符串中的参数33331. 利用Querystring集合读取表单的参数 利用Querystring集合读取表单的参数应将表单的Method属性设置为Get。其方法与使用Form集合相似。 【例8-7】利用Querystring集合读取表单的参数。 输入数据的HTML表单文件8_7.htm与8_3.htm相似,只是表单的Method属性设置为Get,表单处理程序8_7.asp的代码如下:3434 Request对象的Querystring集合示例 Request对象的Querystring集合示例 欢迎您登录本站点% Phone=Request(U
27、serPhone) Response.write(您的姓名是: & Request.Querystring(xm) & ) Response.write(您的性别是: & Request.Querystring(xb) & ) Response.write(您的密码是: & Request.Querystring(mm) & ) Response.write(您的爱好是: & Request.Querystring(ah) & ) Response.write(您的学历是: & Request.Querystring(xl) & ) Response.write(您的生活格言是:) Respo
28、nse.Write Request.Querystring(adage)&%这些信息对吗?如不对,返回运行结果 35352. 利用Querystring集合读取HTTP查询字符串中的参数 HTTP查询字符串中的变量值由问号(?)后面的值指定。Querystring集合可以检索HTTP查询字符串中的变量值。 当表单的Method属性为Get时,表单中的数据被保存在Querystring集合中,当表单的Method属性为Post时,Querystring取回标识在URL后面的HTTP查询字符串中的变量值。 读取Querystring中某个变量值有三种方法: 通过Request(变量)读取,其中“变
29、量”是指Querystring集合的变量。3636【例8-8】通过Request(variable)方法读取Querystring的某个变量。 编写ASP程序8_8.asp如下: 通过Request(variable)方法读取Querystring的变量 通过Request(variable)方法读取Querystring的变量 ASP培训班通讯录 赵一 钱二 张三 李四 王五 孙六 该程序提供链接方式(链接到ASP程序8_8_1.asp),传递HTTP查询字符串,运行结果。3737 ASP程序8_8_1.asp通过Request(variable)方法读取Querystring的变量,其代码
30、如下: 通过Request(variable)方法读取Querystring的变量 通过Request(variable)方法读取Querystring的变量 的通讯录是 电话: 住址: 3838 通过Request.Querystring(变量)读取,其中“变量”是Querystring集合的变量。 只需将ASP程序8_8_1.asp改为: 通过Request.Querystring(variable)方法读取Querystring的变量 通过Request.Querystring(variable)方法读取Querystring的变量 的通讯录是 电话: 住址: 3939 通过Reques
31、t.Querystring(Serial)读取,其中Serial是Querystring集合的变量的序号。 将ASP程序8_8_1.asp改为: 通过Request.Querystring(variable)方法读取Querystring的变量 通过Request.Querystring(variable)方法读取Querystring的变量 的通讯录是 电话: 住址: 三种方法所得到的结果是相同的。40408.2.5 使用Cookies集合 Cookies集合是Response对象和Request对象共有的一项经常用到的集合。 用户在通过HTTP协议访问一个主页时,每次连接时都要重新开始。因
32、此,如果要判别某个用户是否曾经进入本网站,那么只能使用Cookies了。当用户第一次访问网站时,可以利用Response对象的Cookies集合将数据存储到客户端计算机,当用户再次访问此网站时,则可利用Request对象的Cookies集合取得相关信息。41418.2.5 使用Cookies集合 1. Cookies技术 2. Cookies的特点 3. Cookies的属性 4. Cookies的使用 42421. Cookies技术 cookies是一种Web服务器通过浏览器在访问者的硬盘上存储信息的手段。而将cookies用于INTERNET的本意是为了克服HTTP天生的无记录状态,众所
33、周知,浏览器与Web服务器是利用HTTP进行通信的,而HTTP又是无记录的,当一个请求发送到Web服务器时,无论其是否是初次来访,服务器都会把它当作第一次来对待,根本没有对它的记忆,为了克服这一缺陷,客户端永久性的cookies应运而生。 编写cookies文件时,用户需要的信息主要有cookies的 截 止 日 期 、 cookies访 问 域 名 的 URL、cookies变量名称和一些与cookies变量有联系的数据。4343 相对其较简单的包含内容,cookies能为站点和用户所带来的好处实在太多,首先它可以让Web站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径;其次
34、它可以告诉在线广告商广告被点击的次数;再者它可让用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点;另外还可以帮助站点统计用户资料以实现个性化服务。 Cookies是通过HTTP Headers从服务器端返回到浏览器上。首先,服务器端在响应中利用Set-Cookies Headers来创建一个Cookies,然后,浏览器在它的请求中通过Cookie Headers包含这个已创建的Cookies,并把它返回服务器,从而完成浏览器的认证。44442. Cookies的特点 在HTTP协议下,Cookies仅仅是一个文本文件,是服务器在浏览器端写入的小文件。 Cookies存放在浏览器端的本机
35、磁盘上,而不是存放在服务器端。通常,Cookies包含用户的有关信息(如身份识别号码、密码、用户在Web站点上购物的方式或用户访问该站点的次数等)。无论何时用户连接到服务器,Web站点都可以访问Cookies信息。4545 使用Cookies的好处有下列几点: 可以自由决定Cookies的生命周期,需要的话,甚至可以将Cookie的生命周期设置成数周、数月或数年,不必担心cookies会因自动消失而失去某些信息。 由于cookies是存放在浏览器端的本机磁盘上,故不会占用服务器端的磁盘空间。 cookies可以记录浏览者的个人信息,因此,站点的制作者就可以根据cookies记录的信息,设计出独
36、具浏览者个人风格的网页或信息。4646 使用cookies的缺点: 若浏览者禁止服务器在浏览器端写入cookies,cookies就无法记录个人信息。 只能记录字符串、数值等简单的数据类型,无法记录对象、数组等复杂的数据类型。 由于cookies存放在浏览器端,所以它可能被浏览者删除或拒绝写入。 cookies会造成安全上的威胁,导致个人信息被窃取。47473. Cookies的属性 Cookies共有五种属性,指定cookies的有关信息。Cookies属性及其说明见表8-3。表8-3 Cookies属性及其说明属性名称属性名称说明说明DomainDomain指定只有某个指定只有某个Doma
37、inDomain(网域)可以存取(网域)可以存取该该cookiecookie,只写属性,只写属性ExpiresExpirescookiecookie的的过过期日期。期日期。为为了在会了在会话结话结束后将束后将cookiecookie存存储储在客在客户户端磁端磁盘盘上,必上,必须设须设置置该该日期。若此日期。若此项项属性的属性的设设置未超置未超过过当前日期,当前日期,则则在任在任务结务结束后束后cookiecookie将到期,只写属性将到期,只写属性HasKeysHasKeys指定指定cookiecookie是否包含关是否包含关键键字字KeyKey,只,只读读属性属性PathPath指定只有特定
38、路径可以存取指定只有特定路径可以存取该该cookiecookie,默,默认为应认为应用程序的路径,只用程序的路径,只写属性写属性SecureSecure用于用于设设定定CookieCookie是否在一个安全的渠道是否在一个安全的渠道传递传递。当一个安全渠道没有。当一个安全渠道没有在在HTTPHTTP首首页页被被发现发现,CookieCookie信息将不信息将不发发送送48484. Cookies的使用 Cookies是通过Response对象的Cookies集合来创建的,当然,如果Cookies已存在,则可以通过Response对象来设置新的Cookies值并删除旧值。其语法格式如下:Resp
39、onse.Cookies(cookies名)(key)|.属性=值 说明: cookies名是用户自定义的Cookies名称; key为可选参数,如指定Key,则Cookies就是一个字典,该参数值将被设置为“值”,并可以在以后的接收中使用;4949 “值”指定分配给Cookies属性的值。 属性是指Cookies属性。 Cookies默认的生命周期起始于它被写入浏览器端的那一刻开始,结束于浏览器结束执行时;如果要 设 置 Cookies的 存 在 期 限 , 可 以 使 用Response.Cookies(name).Expries属性;当存在期限截止时,Cookies将自动从浏览器端的本机
40、磁盘上删除。 Reponse对象的Cookies集合用于写入Cookies,而Request对象的Cookies集合则可以读出Cookies并向服务器端传递。5050 (1) 不带Key的Cookies的创建和读取 对 于 不 带 Key的 Cookies的 创 建 , 只 要 指 定Cookies的参数和其相应的值即可。 【例8-9】创建两个cookies:myBox和mySphere。如下列程序所示: Cookies示例 5151 代码以8-9.asp存盘,并运行即创建了Cookies。创建好Cookies以后,可以通过如下的语句读取相应的值:Response.Cookies(cookie
41、sResponse.Cookies(cookies名名) ) 其中,cookie名是已创建的Cookies的名称。5252 【 例 8-10】 读 取 8-9.asp创 建 的 Cookies中“myBox”的值。 8-10.asp的代码如下: 读取不带Key的Cookie 读取不带Key的Cookie% Response.Write mybox值: Response.Write(Request.Cookies(mybox)&) if Response.Cookies(mybox).Haskeys=False then Response.Write(mybox未带Key) Else Respo
42、nse.Write(mybox带有Key) end if% 5353 如果只是在当前的网页里使用Cookies,则上面的语句已经足够了。如果希望在重新启动浏览器后仍旧可以识别这个Cookies,就必须将Cookies存入到浏览器的文件当中。这只需设置Cookies在客户端可以保存的时间。将8-9.asp改为如下代码: Cookies示例 5454 其中date()+7表示保存的时间为7天。每一个Web服务器都会产生一个与其网站相关的Cookie文件名称,并将其储存在客户端的计算机中。通常,如果使用Win98/Me系统,Cookie文件存放在C:WindowsCookies目 录 中 ; 如 果
43、 使 用 的 是Win2000/XP系统,Cookie文件存放在C:Documents and Settings中该用户目录下的Cookies子目录中。 运行修改后的程序8-10.asp,就可以在客户端的本机磁盘中找到Cookies文件,如图8-10所示。5555 (2) 带Key的Cookies的创建和读取 一个Cookie可以有多个值(这有点像数组),这样的Cookie被称为Cookies字典,Cookies字典中每个Cookie的值被分配给一个Key(数组下标),可以设置指定的Cookie(Key)的值。 【例8-11】创建一个Cookies字典:myBox,该Cookie包含3个值:3
44、0、40、50,其Key分别是:length、width、height。 程序8-11.asp代码如下:5656 创建一个Cookies字典示例 说明:在指定其属性值时,不能带Key,否则会产生错误。如下述代码将出现“运行错误”。Response.Cookies(myBox)(height).Expires = date()+7 5757 对于Cookies字典,可以通过如下的语句来读取相应的值:Response.Cookies(cookieResponse.Cookies(cookie名名)(Key)(Key名名) ) 其中,“Key名”是已创建的Cookies字典的一个Key的名称。也可以
45、通过如下语句读取:Response.Cookies(Name)(Serial)Response.Cookies(Name)(Serial) 其中,Serial是已创建的Cookies字典的Key的序号。5858 【例8-12】读取Cookies字典myBox的值。 程序8-12.asp代码如下: 读取带Key的Cookies 读取带Key的Cookies% Response.Write mybox的值:& Response.Write(Request.Cookies(myBox)(length) & , ) Response.Write(Request.Cookies(myBox)(width
46、) & , ) Response.Write(Request.Cookies(myBox)(height) & ) Response.Write(Request.Cookies(myBox)(1) & , ) Response.Write(Request.Cookies(myBox)(2) & , ) Response.Write(Request.Cookies(myBox)(3) & ) % 程序8-12.asp运行结果如图8-11所示。5959 (3) Cookies的重建 对于已建立的Cookies,要重建它,只要使用如下的语句即可重建: Response.Cookies(Name)=V
47、alue若是建立Cookies字典,则还要加上相应的Key值。 如果一个存在的Cookie并没有一个Key值,但是Response.Cookies指定了Key的名称和值,则这个存在的Cookie将被删除,并创建新的Key名和值。同样,如果一个存在的Cookie有Key值,但是Response.Cookies没有指定Key名,则这个存在的Key值将被删除。例如,先运行了例8-9后,又运行例8-11,则得到的Cookie文件如图8-12所示。60608.2.6 使用ClientCertificate集合 当客户端通过ASP访问服务器的一个页面或其它资源时,可以通过Client Certificat
48、e集合向服务器表明身份,而身份的表明则通过“关键字”和“关键字子字段”两部分参数来实现。具体参数如表8-2、表8-3所示。 6161关键字关键字参数说明参数说明CertificateCertificate以以ASN.1ASN.1格式返回所有服格式返回所有服务务器端身份器端身份权权限的二限的二进进制信息制信息FlagsFlags提供其它提供其它额额外的服外的服务务器身份器身份权权限的限的标签标签,包括,包括ceCertPresentceCertPresent与与ceUnrecognizedIssuerceUnrecognizedIssuer等,其常数等,其常数值值分分别为别为1 1、2 2。前者
49、表示服。前者表示服务务器端已器端已经经提出提出权权限信息,而后者表限信息,而后者表示服示服务务器端最近一次的器端最近一次的权权限限为为未知的未知的发发行者。行者。IssuerIssuer以字符串的以字符串的类类型返回型返回发发行者身份行者身份权权限的子字段信息,当限的子字段信息,当子字段的数据超子字段的数据超过过一个一个则则以以“ “,” ”将其分隔,例如:将其分隔,例如:C=USC=US,OU=SoftwareDevelopOU=SoftwareDevelop等等SerialNumberSerialNumber将四将四组组十六十六进进位序号以位序号以ASCIIASCII格式返回,其中以格式返
50、回,其中以“ “,” ”作作为为分隔符号,例如:分隔符号,例如:FF-00-CCFF-00-CCSubjectSubject以字符串的以字符串的类类型返回服型返回服务务器端身份器端身份权权限的子字段信息,限的子字段信息,当子字段的数据超当子字段的数据超过过一个,一个,则则以以“ “,” ”将其分隔,例如:将其分隔,例如:C=USC=US,OU=SoftwareDevelopOU=SoftwareDevelop等等ValidFormValidForm返回身份返回身份权权限的起始限的起始时间时间ValidUntilValidUntil返回身份返回身份权权限的限的结结束束时间时间表8-2 Clien
51、t Certificate集合关键字6262表8-3 Client Certificate集合关键字子字段子字段说明说明子字段子字段说明说明C C表示国家的名称表示国家的名称O O表示公司或表示公司或组织组织的名称的名称CNCN表示客表示客户户端的名称端的名称OUOU表示公司或表示公司或组织组织中的部中的部门门名称名称GNGN表示客表示客户户端的用端的用户户名称(不名称(不包含姓)包含姓)S S表示州或省的名称表示州或省的名称I I表示客表示客户户的用的用户户的姓氏的姓氏T T表示用表示用户户的的职职称称L L表示客表示客户户端的位置端的位置L L表示客表示客户户端的位置端的位置6363 通过
52、Clientcertificate集合,可以让不同的用户打开不同的网页。例如对于A、B、C三个不同的用户打开不同的页面。64648.3 上机练习 在Web网页中,表单是必不可少的元素,它对于Web页面交互功能的实现起非常的作用。【练习8-1】使用表单和Form集合的技术,编写实现例8-3中数据交换的ASP程序,显示结果。图8-13 数据交换的ASP程序6565 程序名为:lx8_1.asp,代码如下:% xm=Request.Form(xm) if xm then Response.write 欢迎登录本站点! Response.write 您的姓名是: & Request.Form(xm)
53、& Response.write 您的性别是: & Request.Form(xb) & Response.write 您的密码是: & Request.Form(mm) & Response.write 您的爱好是: & Request.Form(ah) & Response.write 您的学历是: & Request.Form(xl) & Response.write 您的生活格言是: Response.Write Request.Form(adage) & Response.Write 这些信息对吗? Response.Write 如不对,返回 Response.end end if%
54、 请输入您的有关数据 6666 姓名: 性别:男 女 密码: 爱好: 音乐 汽车 钓鱼 集邮 绘画 学历: 小学 中学 大专 本科 研究生 生活格言: 显示结果6767 【练习8-2】利用Querystring集合读取HTTP查询字符串中的参数,编写实现例8-8中数据交换的ASP程序。程序名为:lx8_2.asp,代码如下: 交互数据的表单 培训班通讯录% xm=Request.Querystring(name) if xm then Response.write xm & 的联系方式是: Response.write 电话: & Request.Querystring(tele) & Response.write 住 址 : & Request.Querystring(add) & Response.Write 返回 Response.end end if%6868 赵一 钱二 张三 李四 王五 孙六 显示结果6969 【练习8-3】一个古老的游戏:石头、剪子、布。如图8-15所示,游戏者用鼠标单击选择石头、剪子或布,计算机则随机选择,进行比赛。 程序lx8_3.asp的代码如下: 石头、剪子、布小游戏 7171 玩家电脑 请选择: 石头 剪子 布 f1.submit 说明:可以使用浏览器端的.htm程序来实现上述功能,参见第6课。显示结果7272