8.1 课前导读
8.2 课堂教学
8.3 上机练习
8.4 课后作业第 8课 Request对象及其使用
8.1 课前导读输入,处理和输出是所有程序设计语言的基本模式,ASP作为一种类程序设计语言也不例外 。 在 ASP中,
Request和 Response对象分别完成输入和输出的大部分功能,是 ASP技术中非常重要的两个对象:
Response对象:用来访问服务器端所创建的并发回到客户端的响应信息,包括直接发送信息给浏览器,
重定向浏览器到另一个 URL或设置 cookie的值 。 它也提供了一系列的方法用来创建输出,例如无处不在的
Response.Write方法 。
Request对象:为脚本提供了当客户端请求一个页面或者传递一个窗体时,客户端提供的全部信息 。
这包括能指明浏览器和用户的 HTTP变量,在这个域名下存放在浏览器中的 cookie,任何作为查询字符串而附于 URL后面的字符串或页面的 <FORM>段中的 HTML控件的值 。 也提供使用 SecureSocketLayer(SSL)或其他加密通信协议的授权访问,及有助于对连接进行管理的属性 。
值得一提的是:虽然 Request对象的属性与方法各有一个,比 Response对象的 9个属性 8种方法少了许多,但 Request对象的集合确有 5种,除 Cookies集合与 Response对象的 Cookies集合相对应外,新增的 4种集合大大丰富了 Request对象获取输入信息的能力 。
8.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集合
8.2.1 Request对象概述
1,Request对象的集合
2,Request对象的属性
3,Request对象的方法
4,Request对象的使用
8.2.1 Request对象概述
Request 对象是负责从客户端浏览器获取用户信息的对象 。 它是 ASP中重要的服务器内置对象,它连接着 Web服务器和 Web客户端程序 。 利用 Request对象可以接收基于 HTTP请求的所有用户信息,如用 Post方法或 Get方法传送来 的参数以及 Cookie和 Server
Variable等等 。
1,Request对象的集合
Request对象提供了 5个集合,可以用来获取客户端对 Web服务器请求的各类信息,其说明见表 8-1。
表 8-1 Request对象的集合及说明集合名称 说明
ClientCertific
ate
当客户端访问一个页面或其他资源时,用来向服务器表明身份的客户证书的所有字段或条目的数值集合,每个成员均是只读
Cookies 根据用户的请求,用户系统发出的所有 cookie的值的集合,这些Cookie仅对相应的域有效,每个成员均为只读
Form METHOD的属性值为 POST时,所有作为请求提交的 <FORM>段中的 HTML控件单元的值的集合,每个成员均为只读
QueryString
依附于用户请求的 URL后面的名称/数值对或者作为请求提交的且 METHOD属性值为 GET(或者省略其属性 )的,或 <FORM>
中所有 HTML控件单元的值,每个成员均为只读
ServerVariabl
es
随同客户端请求发出的 HTTP报头值,以及 Web服务器的几种环境变量的值的集合,每个成员均为只读在这些集合之中,最常使用的是 Form,Cookies和
QueryString集合 。
2,Request对象的属性
Request对象唯一的属性是 TotalBytes,它提供关于用户请求的字节数量的信息:返回由客户端发出的请求信息的字节数 。 使用中通常关注客户端各项请求信息的值而非整个请求字符串,因此该属性很少被用于 ASP页 。
3,Request对象的方法
Request对象唯一的方法是 BinaryRead,它允许访问从用户页面 <FORM>段中传递给服务器的请求信息的完整内容 。 其语法格式为:
Request.BinaryRead(count)
说明:
① count表示当数据作为 POST请求的一部分发往服务器时,从客户请求中获得数据的字节数 。
② 该方法返回一个 Variant数组 (或者 SafeArray)。
③ 如果 ASP代码已经引用了 Request.Form集合,
这个方法就不能再用 。 同样,如果用了 BinaryRead方法,也不能再访问 Request.Form集合 。
4,Request对象的使用在 ASP中,当客户端请求一个页面或传递一个表单时,Request对象为脚本提供了客户端浏览器所提供的全部信息,包括用户请求的所有信息,用户为该域名存放在浏览器下的 Cookie,使用 Secure Socket
Layer( SSL) 或其它加密通信协议的授权访问以及对连接进行管理的属性等 。 Request对象可以利用集合,
属性,方法等来进行参数的传递 。 其语法格式为:
Request.[ 集合 | 属性 | 方法 ] ( 变量 )
Request对象中有 5个集合可以用来完成客户端对
ASP服务器的请求的响应 。 实际上 Request对象是由一群对象的集合组成,在引用客户端页面定义的变量时,
有多种方法可以使用 。 例如,要在 Request对象的
Form中取得名为,姓名,的信息,可以使用下述赋值命令:
name=Request.Form("姓名 ")
也可以不指定集合名 ( Form),直接使用命令:
name=Request("姓名 ")
程序会以 QueryString,Form,Cookies 和
ServerVariables的顺序搜索所有集合,当发现一个匹配的变量时,就认定它是要引用的成员 。 当然,编程实践中,为避免不同集合中同名变量引用的二义性,
最好显式地指定集合 。
8.2.2 ASP与表单的交互在动态网页设计中,表单是必不可少的元素,许多功能的实现都与表单密不可分 。 表单的主要功能是接受用户填写在表单中的文字,选择项等内容,在
HTTP的 POST方法之后,由客户端浏览器将信息发送到服务器端 。
由表单接受用户输入的信息一般要按照程序预设的逻辑判断进行检查,这种检查根据需要可以在客户端或服务器端进行 。 客户端的逻辑判断一般与表单放在一个页面内,常适用于较为简单的判断;服务器端的逻辑判断只能由表单内 action属性所指向的 ASP网页来完成,由于服务器端有功能更为强大的对象模型,
能实现更为复杂的逻辑判断,因此适用于复杂的逻辑判断 。
网页中的表单与集合 Form是两个不同的概念,虽然它们的英文名称相同 。 表单的功能是在客户端接受用户的输入信息,是在客户端由浏览器解释的 HTML标记,而集合 Form则是在服务器端的一种数据结构 。 一般情况下,客户端表单的信息在执行网页的 Post方法后,在服务器端 Request对象的 Form集合中会有相应的量与之对应 。
在 HTML网页中,表单以标记 <FORM></FORM>开始和结束 。 表单标记的语法格式为:
<FORM method=传送方式 action= "URL" >
</FORM>
其中
①,URL” 设置表单处理程序的相对或绝对位置
( 若要将表单数据寄到电子邮件信箱,可以设置该电子邮件信箱的 URL;若没有设置 Action属性的值,表示使用默认的表单处理程序 ) ;
②,传送方式,用于指明交互表单的信息传送方式,有 Post和 Get两种 。
③ 其他属性及其说明见表 8-2。
表 8-2 表单的其他属性说明属性名 说明
accept-charset
设置表单数据的字符编码方式,服务器依据该属性指定的字符编码方式处理表单数据。字符编码方式定义于 RFC2045,中间以逗号隔开
accept 设置作为服务器处理表单数据的 Mime类型
enctype
设置将表单数据返回服务器时所采取的编码方式,默认值为
"application/x-www-form-urlencoded",若您允许浏览者上传文件给服务器,那么 ENCTYPE的值须为 Multipart/Form-Data;若要将表单数据寄到电子邮件信箱,那么 enctype的值可为
Text/Plain。
name 设置表单的名称 (限英文 ),此名称可供 Script使用。
target 设置用来显示表单处理程序结果的目标框架。
在 表 单 中 可 以 使 用 <INPUT>,<SELECT>
</SELECT>,<OPTION> </OPTION>,<TEXTAREA>
</TEXTAREA>等控件来定义表单信息项,参见第 6课 。
单击表单中的,Submit” 控件,将触发表单的提交事件,onSubmit;单击表单中的,Reset” 控件,
将触发表单的重置事件,onReset。
使用表单传送信息的方式通常有下述三种:
① 由 HTML网页中的表单传送信息给处理该信息的 ASP文件;
② 由 ASP文件中的表单传送信息给另一个 ASP文件,后者处理该信息;
③ 在 ASP文件中的表单所传送的信息由其自身进行处理 。
其中第 3种方式效率较高,但编程较复杂 。
【 例 8-1】 ASP与 表单的交互 。
使用 HTML网页中表单输入并提交信息,网页文件名为 8_1.htm,其代码如下:
<HTML>
<HEAD><TITLE>利用表单输入信息 </TITLE></HEAD>
<BODY>请输入
<FORM Action="8_1_1.asp" Method="post">
姓名,<INPUT type="Text" name="姓名 " size=8><br>
性别:男 <INPUT type="Radio" name="性别 " value="男 " Checked>
女 <INPUT type="Radio" name="性别 " value="女 " ><p>
<INPUT type="Submit" value="提交 ">
<INPUT type="Reset" value="重写 ">
</FORM>
</BODY>
</HTML>
当用户在浏览器中输入表单数据并单击,提交,
按钮后,服务器端的表单处理程序 8_1_1.asp可以利用
Request对象读取浏览器端的数据并返回相应信息 。 表单处理程序 8_1_1.asp的代码如下:
<HTML>
<HEAD><TITLE>使用 Request对象获得表单信息 </TITLE></HEAD>
<BODY>
<p align="center">欢迎您登录本站点 <p>
<%
Response.write "您是," & Request.Form("姓名 ")
if Request.Form("性别 ")="男 " then
Response.write "大侠 "
else
Response.write "侠女 "
end if
%>
<p><a href="8_1.htm">如不对,返回 </a></P>
</BODY>
</HTML>
上例可以改为使用一个 ASP文件传送和处理信息 。
【 例 8-2】 表单所传送的信息由其所在的 ASP文件自身进行处理 。
代码如下:
<HTML>
<HEAD><TITLE>利用表单输入信息 </TITLE></HEAD>
<BODY><H3 align=center>ASP与表单的交互 </H3>
<%
xm=Request.Form("姓名 ")
xb=Request.Form("性别 ")
if xm<>"" then
Response.write "<p>欢迎登录本站点,"
Response.write "您是 " & xm
if xb ="男 " then
Response.write "大侠 "
else
Response.write "侠女 "
end if
Response.write "<p><a href='8_2.asp'>如不对,返回 </a>"
Response.end
end if
%>
请输入
<Form Action="8_2.asp" method=Post >
姓名,<Input Type="text" Name="姓名 " Size=8>
性别:男 <Input Type="radio" Name="性别 " Value="男 " Checked>
女 <Input Type="radio" Name="性别 " Value="女 " ><p>
<Input Type="Submit" Value="提交 ">
<Input Type="Reset" Value="重写 ">
</Form>
</BODY>
</HTML>
8.2.3 使用 Form集合当使用表单的 Post方式提交数据时,表单中的数据被保存在 Request对象的 Form集合中 。 使用 Form集合来传递数据的语法格式如下:
Request.Form( element) [(index)]|.Count]
其中,element为 Form集合所要检索的表单元素
( 控件 ) 名称; Index用于指定表单元素多个值中的某一个,当然此表单元素有多个值时此项才有意义;
Count用于指定表单某元素的值的个数 。
1,读取 Form集合中特定元素对象的值
2,读取 Form集合中所有元素对象的值
3,读取 Form集合的某元素对象的特定值
4,读取 Form集合的某元素对象的全部参数值
1,读取 Form集合中特定元素对象的值
【 例 8-3】 读取 Form集合中特定元素对象的值 。
首先建立一个输入数据的 HTML表单文件 8_3.htm,
其代码如下:
<HTML>
<HEAD><TITLE>输入数据的表单 </TITLE></HEAD>
<BODY>
<P align=center>输入数据的表单
<Form Action="8_3.asp" Method="post">
<TABLE ALIGN=Center BORDER=1>
<tr valign=baseline>
<td>姓名,<Input Type="text" Name="xm" Size=8>
<td>性别:男 <Input Type="radio" Name="xb" Value="男 " Checked>
女 <Input Type="radio" Name="xb" Value="女 ">
<td>密码,<Input Type="Password" Name="mm" Size=12>
<tr><td colspan=3>爱好:
<Input Type="Checkbox" Name="ah" value="音乐 ">音乐
<Input Type="Checkbox" Name="ah" value="汽车 ">汽车
<Input Type="Checkbox" Name="ah" value="钓鱼 ">钓鱼
<Input Type="Checkbox" Name="ah" value="集邮 ">集邮
<Input Type="Checkbox" Name="ah" value="绘画 ">绘画
<tr><td>学历,<br>
<Select Name="xl" style="width:100px" size=4>
<Option Value="小学 ">小学
<Option Value="中学 ">中学
<Option Value="大专 ">大专
<Option Value="本科 " Selected>本科
<Option Value="研究生 ">研究生
</select>
<td colspan=2>生活格言,<br>
<Textarea Name="adage" Cols=30 Rows=4></textarea>
</TABLE>
<p align=center><Input Type="Submit" Value="提交 ">
<Input Type="Reset" Value="重写 ">
</Form>
</BODY>
</HTML>
单击,提交,按钮,调用表单处理程序 8_3.asp
将用户输入的信息传递给服务器,经处理后反馈给用户,显示结果 。
文件 8_3.asp的代码如下:
<HTML>
<HEAD><TITLE>Request对象的 Form集合示例 </TITLE></HEAD>
<BODY>
<P align="center">Request对象的 Form集合示例 <P>
<p>欢迎您登录本站点 <p>
<%
Response.write("您的姓名是," & Request.Form("xm") & "<BR>")
Response.write("您的性别是," & Request.Form("xb") & "<BR>")
Response.write("您的密码是," & Request.Form("mm") & "<BR>")
Response.write("您的爱好是," & Request.Form("ah") & "<BR>")
Response.write("您的学历是," & Request.Form("xl") & "<BR>")
Response.write("您的生活格言是,")
Response.Write Request.Form("adage")&"<BR>"
%>
<P align="center">这些信息对吗?
<a href="8_3.htm">如不对,返回 </a></P>
</BODY>
</HTML>
2,读取 Form集合中所有元素对象的值上面介绍了如何传递 Form集合中特定元素对象的值,下面介绍如何读取 Form集合中所有元素对象的值 。
【 例 8-4】 在例 8-3中使用循环语句读取 Form集合中所有元素对象的值 。
有两种循环语句可以读取 Form集合中所有元素对象的值 。
① 使用,For each? In” 循环语句,将文件
8_3.asp的代码改为:
<HTML>
<HEAD><TITLE>用 For each? In语句读取 Form集合示例 </TITLE></HEAD>
<BODY>
<P align="center">用 For each? In语句读取 Form集合示例 <P>
<p>欢迎您登录本站点 <p>
<%
For each Item in Request.Form
Response.Write(Item&":")
Response.Write(Request.Form(Item)&"<BR>")
Next
%>
<P align="center">这些信息对吗?
<a href="8_3.htm">如不对,返回 </a></P>
</BODY>
</HTML>
② 使用,For? next” 循环语句,将文件
8_3.asp的代码改为:
<HTML>
<HEAD><TITLE>用 For? next语句读取 Form集合示例 </TITLE></HEAD>
<BODY>
<P align="center">For? next语句读取 Form集合示例 <P>
<p>欢迎您登录本站点 <p>
<%
For I=1 to Request.Form.count
Response.Write(Request.Form(I)&"<BR>")
Next
%>
<P align="center">这些信息对吗?
<a href="8_3.htm">如不对,返回 </a></P>
</BODY>
</HTML>
这种方法不能得到对象的名称,显示结果 如图 8-
4所示 。
3,读取 Form集合的某元素对象的特定值当 Form集合中的元素对象具有多个值时 ( 如
checkbox,select等控件对象 ),欲读取某个特定的参数可以使用 Index来读取 。
【 例 8-5】 读取 Form集合的某个多值元素的特定值 。
输入数据的 HTML表单文件 8_5.htm同 8_3.htm,表单处理程序 8_5.asp的代码如下:
<HTML>
<HEAD><TITLE>读取 Form集合的某个多值元素的特定参数值 </TITLE></HEAD>
<BODY>
<P align="center">读取 Form集合的某个多值元素的特定参数值 <P>
<p>欢迎您登录本站点 <p>
<%
Response.Write(Request.Form("xm")&"的第二爱好是,")
Response.Write(Request.Form("ah")(1)&"<BR>")
%>
<P align="center">这些信息对吗?
<a href="8_5.htm">如不对,返回 </a></P>
</BODY>
</HTML>
运行结果
4,读取 Form集合的某元素对象的全部参数值与读取 Form集合中所有元素对象的值一样,也可以采用两种循环语句来读取 Form集合的某元素对象的全部参数值 。 以 For? next循环为例 。
【 例 8-6】 读取 Form集合的某元素对象的全部参数值,如图 8-6所示 。
输入数据的 HTML表单文件 8_6.htm同 8_3.htm,表单处理程序 8_6.asp的代码如下:
<HTML>
<HEAD><TITLE>读取 Form集合的某元素对象的全部参数值 </TITLE></HEAD>
<BODY>
<P align="center">读取 Form集合的某元素对象的全部参数值 <P>
<p>欢迎您登录本站点 <p>
<%
For I=1 to Request.Form("爱好 ").count
Response.Write(Request.Form("xm")&"的第 "&I&"爱好是,")
Response.Write(Request.Form("ah")(I)&"<BR>")
Next
%>
<P align="center">这些信息对吗?
<a href="8_6.htm">如不对,返回 </a></P>
</BODY>
</HTML>
程序运行结果 。
说明:在利用 Form集合读取参数时,与之相对应的 HTML页面中的表单的 Method属性一定要设置成 Post
才行,否则将无法读取参数 。
8.2.4 使用 Querystring集合
Querystring集合是 Request对象中最常用的另外一个集合,与 Form集合不同,Querystring集合读取参数时,HTML表单的 Method应设置成 Get。
除 了 读 取 表 单 对 象 传 递 的 参 数 之 外,
Querystring集合还可以通过读取 HTTP查询字符串中的参数值来传递参数 。 使用 Querystring集合的语法格式如下:
Request.Querystring(变量 )[(index)]|.Count]
其中,,变量,为在 HTTP查询字符串中指定要检索的变量名称; Index用于检索变量多个值中的某一个,当然此变量有多个值时此项才有意义; Count用于指定 Querystring中某变量值的个数 。
8.2.4 使用 Querystring集合
1,利用 Querystring集合读取表单的参数
2,利用 Querystring集合读取
HTTP查询字符串中的参数
1,利用 Querystring集合读取表单的参数利用 Querystring集合读取表单的参数应将表单的
Method属性设置为 Get。 其方法与使用 Form集合相似 。
【 例 8-7】 利用 Querystring集合读取表单的参数 。
输入数据的 HTML表单文件 8_7.htm与 8_3.htm相似,
只是表单的 Method属性设置为 Get,表单处理程序
8_7.asp的代码如下:
<HTML>
<HEAD><TITLE>Request对象的 Querystring集合示例 </TITLE></HEAD>
<BODY>
<P align="center">Request对象的 Querystring集合示例 <P>
<p>欢迎您登录本站点 <p>
<%
Phone=Request("UserPhone")
Response.write("您的姓名是," & Request.Querystring("xm") & "<BR>")
Response.write("您的性别是," & Request.Querystring("xb") & "<BR>")
Response.write("您的密码是," & Request.Querystring("mm") & "<BR>")
Response.write("您的爱好是," & Request.Querystring("ah") & "<BR>")
Response.write("您的学历是," & Request.Querystring("xl") & "<BR>")
Response.write("您的生活格言是,")
Response.Write Request.Querystring("adage")&"<BR>"
%>
<P align="center">这些信息对吗?
<a href="8_7.htm">如不对,返回 </a></P>
</BODY>
</HTML> 运行结果
2,利用 Querystring集合读取 HTTP查询字符串中的参数
HTTP查询字符串中的变量值由问号 (?) 后面的值指定 。 Querystring集合可以检索 HTTP查询字符串中的变量值 。
当表单的 Method属性为 Get时,表单中的数据被保存在 Querystring集合中,当表单的 Method属性为 Post
时,Querystring取回标识在 URL后面的 HTTP查询字符串中的变量值 。
读取 Querystring中某个变量值有三种方法:
① 通过 Request( 变量 ) 读取,其中,变量,是指 Querystring集合的变量 。
【 例 8-8】 通过 Request(variable)方法读取 Querystring的某个变量 。
编写 ASP程序 8_8.asp如下:
<HTML>
<HEAD><TITLE>通过 Request(variable)方法读取 Querystring的变量 </TITLE></HEAD>
<BODY>
<P align="center">通过 Request(variable)方法读取 Querystring的变量 <P>
<p align="center">ASP培训班通讯录 <p><p>
<a href="8_8_1.asp?name=赵一 &Tele=1111111&Add=东风路 5号 ">赵一 </a>
<a href="8_8_1.asp?name=钱二 &Tele=2222222&Add=中山南路 1号 ">钱二 </a>
<a href="8_8_1.asp?name=张三 &Tele=3333333&Add=北京一路 25号 ">张三 </a>
<a href="8_8_1.asp?name=李四 &Tele=4444444&Add=上海路 35号 ">李四 </a>
<a href="8_8_1.asp?name=王五 &Tele=5555555&Add=天津中路 65号 ">王五 </a>
<a href="8_8_1.asp?name=孙六 &Tele=6666666&Add=河南西路 58号 ">孙六 </a>
</BODY>
</HTML>
该程序提供链接方式 ( 链接到 ASP程序 8_8_1.asp),
传递 HTTP查询字符串,运行结果 。
ASP程序 8_8_1.asp通过 Request(variable)方法读取 Querystring的变量,其代码如下:
<HTML>
<HEAD><TITLE>通过 Request(variable)方法读取 Querystring的变量
</TITLE></HEAD>
<BODY>
<P align="center">
通过 Request(variable)方法读取 Querystring的变量 <P>
<%=Request("name")%>的通讯录是
<p><p>电话,<%=Request("tele")%>
住址,<%=Request("add")%>
</BODY>
</HTML>
② 通过 Request.Querystring( 变量 ) 读取,其中,变量,是 Querystring集合的变量 。
只需将 ASP程序 8_8_1.asp改为:
<HTML>
<HEAD><TITLE>
通过 Request.Querystring(variable)方法读取 Querystring的变量
</TITLE></HEAD>
<BODY>
<P align="center">
通过 Request.Querystring(variable)方法读取 Querystring的变量 <P>
<%=Request.Querystring("name")%>的通讯录是
<p><p>电话,<%=Request.Querystring("tele")%>
住址,<%=Request.Querystring("add")%>
</BODY>
</HTML>
③ 通过 Request.Querystring(Serial)读取,其中 Serial是 Querystring集合的变量的序号 。
将 ASP程序 8_8_1.asp改为:
<HTML>
<HEAD><TITLE>
通过 Request.Querystring(variable)方法读取 Querystring的变量
</TITLE></HEAD>
<BODY>
<P align="center">
通过 Request.Querystring(variable)方法读取 Querystring的变量 <P>
<%=Request.Querystring(1)%>的通讯录是
<p><p>电话,<%=Request.Querystring(2)%>
住址,<%=Request.Querystring(3)%>
</BODY>
</HTML>
三种方法所得到的结果是相同的 。
8.2.5 使用 Cookies集合
Cookies集合是 Response对象和 Request对象共有的一项经常用到的集合 。
用户在通过 HTTP协议访问一个主页时,每次连接时都要重新开始 。 因此,如果要判别某个用户是否曾经进入本网站,那么只能使用 Cookies了 。 当用户第一次访问网站时,可以利用 Response对象的 Cookies集合将数据存储到客户端计算机,当用户再次访问此网站时,则可利用 Request对象的 Cookies集合取得相关信息 。
8.2.5 使用 Cookies集合
1,Cookies技术
2,Cookies的特点
3,Cookies的属性
4,Cookies的使用
1,Cookies技术
cookies是一种 Web服务器通过浏览器在访问者的硬盘上存储信息的手段 。 而将 cookies用于 INTERNET
的本意是为了克服 HTTP天生的无记录状态,众所周知,
浏览器与 Web服务器是利用 HTTP进行通信的,而 HTTP
又是无记录的,当一个请求发送到 Web服务器时,无论其是否是初次来访,服务器都会把它当作第一次来对待,根本没有对它的记忆,为了克服这一缺陷,客户端永久性的 cookies应运而生 。
编写 cookies文件时,用户需要的信息主要有
cookies的截止 日期,cookies访问 域名的 URL、
cookies变量名称和一些与 cookies变量有联系的数据 。
相对其较简单的包含内容,cookies能为站点和用户所带来的好处实在太多,首先它可以让 Web站点跟踪特定访问者的访问次数,最后访问时间和访问者进入站点的路径;其次它可以告诉在线广告商广告被点击的次数;再者它可让用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点;另外还可以帮助站点统计用户资料以实现个性化服务 。
Cookies是通过 HTTP Headers从服务器端返回到浏览器上 。 首先,服务器端在响应中利用 Set-Cookies
Headers来创建一个 Cookies,然后,浏览器在它的请求中通过 Cookie Headers包含这个已创建的 Cookies,
并把它返回服务器,从而完成浏览器的认证 。
2,Cookies的特点在 HTTP协议下,Cookies仅仅是一个文本文件,
是服务器在浏览器端写入的小文件 。
Cookies存放在浏览器端的本机磁盘上,而不是存放在服务器端 。 通常,Cookies包含用户的有关信息 ( 如身份识别号码,密码,用户在 Web站点上购物的方式或用户访问该站点的次数等 ) 。 无论何时用户连接到服务器,Web站点都可以访问 Cookies信息 。
使用 Cookies的好处有下列几点:
① 可以自由决定 Cookies的生命周期,需要的话,
甚至可以将 Cookie的生命周期设置成数周,数月或数年,不必担心 cookies会因自动消失而失去某些信息 。
② 由于 cookies是存放在浏览器端的本机磁盘上,
故不会占用服务器端的磁盘空间 。
③ cookies可以记录浏览者的个人信息,因此,
站点的制作者就可以根据 cookies记录的信息,设计出独具浏览者个人风格的网页或信息 。
使用 cookies的缺点:
① 若浏览者禁止服务器在浏览器端写入 cookies,
cookies就无法记录个人信息 。
② 只能记录字符串,数值等简单的数据类型,
无法记录对象,数组等复杂的数据类型 。
③ 由于 cookies存放在浏览器端,所以它可能被浏览者删除或拒绝写入 。
④ cookies会造成安全上的威胁,导致个人信息被窃取 。
3,Cookies的属性
Cookies共有五种属性,指定 cookies的有关信息 。
Cookies属性及其说明见表 8-3。
表 8-3 Cookies属性及其说明属性名称 说明
Domain 指定只有某个 Domain(网域)可以存取该 cookie,只写属性
Expires cookie的过期日期。为了在会话结束后将 cookie存储在客户端磁盘上,必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后 cookie将到期,只写属性
HasKeys 指定 cookie是否包含关键字 Key,只读属性
Path 指定只有特定路径可以存取该 cookie,默认为应用程序的路径,只写属性
Secure 用于设定 Cookie是否在一个安全的渠道传递。当一个安全渠道没有在 HTTP首页被发现,Cookie信息将不发送
4,Cookies的使用
Cookies是通过 Response对象的 Cookies集合来创建的,当然,如果 Cookies已存在,则可以通过
Response对象来设置新的 Cookies值并删除旧值 。 其语法格式如下:
Response.Cookies(cookies名 )[(key)|.属性 ]=值说明:
① cookies名是用户自定义的 Cookies名称;
② key为可选参数,如指定 Key,则 Cookies就是一个字典,该参数值将被设置为,值,,并可以在以后的接收中使用;
③,值,指定分配给 Cookies属性的值 。
④ 属性是指 Cookies属性 。
⑤ Cookies默认的生命周期起始于它被写入浏览器端的那一刻开始,结束于浏览器结束执行时;如果要设置 Cookies 的 存 在 期 限,可 以 使 用
Response.Cookies(name).Expries属性;当存在期限截止时,Cookies将自动从浏览器端的本机磁盘上删除 。
⑥ Reponse对象的 Cookies集合用于写入 Cookies,
而 Request对象的 Cookies集合则可以读出 Cookies并向服务器端传递 。
(1) 不带 Key的 Cookies的创建和读取对于不带 Key 的 Cookies 的创建,只要指定
Cookies的参数和其相应的值即可 。
【 例 8-9】 创建两个 cookies,myBox和 mySphere。
如下列程序所示:
<HTML>
<HEAD><TITLE>Cookies示例 </TITLE></HEAD>
<BODY>
<%
Response.Cookies("myBox") ="This is a Box!"
Response.Cookies("mySphere") ="This is a Sphere!"
%>
</BODY>
</HTML>
代码以 8-9.asp存盘,并运行即创建了 Cookies。
创建好 Cookies以后,可以通过如下的语句读取相应的值:
Response.Cookies(cookies名 )
其中,cookie名是已创建的 Cookies的名称 。
【 例 8-10】 读取 8-9.asp创建的 Cookies中,myBox”
的值 。
8-10.asp的代码如下:
<HTML>
<HEAD><TITLE>读取不带 Key的 Cookie</TITLE></HEAD>
<BODY>
<p>读取不带 Key的 Cookie<p><p><p><p>
<%
Response.Write "mybox值,"
Response.Write(Request.Cookies("mybox")&"<p>"&"<p>")
if Response.Cookies("mybox").Haskeys=False then
Response.Write("mybox未带 Key")
Else
Response.Write("mybox带有 Key")
end if
%>
</BODY>
</HTML>
如果只是在当前的网页里使用 Cookies,则上面的语句已经足够了 。 如果希望在重新启动浏览器后仍旧可以识别这个 Cookies,就必须将 Cookies存入到浏览器的文件当中 。 这只需设置 Cookies在客户端可以保存的时间 。 将 8-9.asp改为如下代码:
<HTML>
<HEAD><TITLE>Cookies示例 </TITLE></HEAD>
<BODY>
<%
Response.Cookies("myBox") ="This is a Box!"
Response.Cookies("mySphere") ="This is a Sphere!"
Response.Cookies("myBox").Expires = date()+7
Response.Cookies("mySphere").Expires = date()+7
%>
</BODY>
</HTML>
其中 date()+7表示保存的时间为 7天 。 每一个 Web
服务器都会产生一个与其网站相关的 Cookie文件名称,
并将其储存在客户端的计算机中 。 通常,如果使用
Win98/Me 系统,Cookie 文件存放在
C:\Windows\Cookies 目录中;如果使用的是
Win2000/XP系统,Cookie文件存放在 C:\Documents
and Settings中该用户目录下的 Cookies子目录中 。
运行修改后的程序 8-10.asp,就可以在客户端的本机磁盘中找到 Cookies文件,如图 8-10所示 。
(2) 带 Key的 Cookies的创建和读取一个 Cookie可以有多个值 ( 这有点像数组 ),这样的 Cookie被称为 Cookies字典,Cookies字典中每个
Cookie的值被分配给一个 Key( 数组下标 ),可以设置指定的 Cookie( Key) 的值 。
【 例 8-11】 创建一个 Cookies字典,myBox,该
Cookie包含 3个值,30,40,50,其 Key分别是:
length,width,height。
程序 8-11.asp代码如下:
<HTML>
<HEAD><TITLE>创建一个 Cookies字典示例 </TITLE></HEAD>
<BODY>
<%
Response.Cookies("myBox")("length") =30
Response.Cookies("myBox")("width") =40
Response.Cookies("myBox")("height") =50
Response.Cookies("myBox").Expires = date()+7
%>
</BODY>
</HTML>
说明:在指定其属性值时,不能带 Key,否则会产生错误 。 如下述代码将出现,运行错误,。
Response.Cookies("myBox")("height").Expires = date()+7
对于 Cookies字典,可以通过如下的语句来读取相应的值:
Response.Cookies(cookie名 )(Key名 )
其中,,Key名,是已创建的 Cookies字典的一个
Key的名称 。 也可以通过如下语句读取:
Response.Cookies(Name)(Serial)
其中,Serial是已创建的 Cookies字典的 Key的序号 。
【 例 8-12】 读取 Cookies字典 myBox的值 。
程序 8-12.asp代码如下:
<HTML>
<HEAD><TITLE>读取带 Key的 Cookies</TITLE></HEAD>
<BODY>
<p>读取带 Key的 Cookies<p><p><p><p>
<%
Response.Write "mybox的值,"&"<p>"
Response.Write(Request.Cookies("myBox")("length") & ",")
Response.Write(Request.Cookies("myBox")("width") & ",")
Response.Write(Request.Cookies("myBox")("height") & "<p>")
Response.Write(Request.Cookies("myBox")(1) & ",")
Response.Write(Request.Cookies("myBox")(2) & ",")
Response.Write(Request.Cookies("myBox")(3) & "<p>")
%>
</BODY>
</HTML>
程序 8-12.asp运行结果如图 8-11所示 。
(3) Cookies的重建对于已建立的 Cookies,要重建它,只要使用如下的语句即可重建:
Response.Cookies("Name")=Value
若是建立 Cookies字典,则还要加上相应的 Key值 。
如果一个存在的 Cookie并没有一个 Key值,但是
Response.Cookies指定了 Key的名称和值,则这个存在的 Cookie将被删除,并创建新的 Key名和值 。 同样,如果一个存在的 Cookie有 Key值,但是 Response.Cookies
没有指定 Key名,则这个存在的 Key值将被删除 。 例如,
先运行了例 8-9后,又运行例 8-11,则得到的 Cookie文件如图 8-12所示 。
8.2.6 使用 ClientCertificate集合当客户端通过 ASP访问服务器的一个页面或其它资源时,可以通过 Client Certificate集合向服务器表明身份,而身份的表明则通过,关键字,和,关键字子字段,两部分参数来实现 。 具体参数如表 8-2、
表 8-3所示 。
关键字 参数说明
Certificate 以 ASN.1格式返回所有服务器端身份权限的二进制信息
Flags
提供其它额外的服务器身份权限的标签,包括
ceCertPresent与 ceUnrecognizedIssuer等,其常数值分别为
1,2。前者表示服务器端已经提出权限信息,而后者表示服务器端最近一次的权限为未知的发行者。
Issuer
以字符串的类型返回发行者身份权限的子字段信息,当子字段的数据超过一个则以“,”将其分隔,例如:
C=US,OU=SoftwareDevelop等
SerialNumber 将四组十六进位序号以 ASCII格式返回,其中以“,”作为分隔符号,例如,FF-00-CC
Subject
以字符串的类型返回服务器端身份权限的子字段信息,
当子字段的数据超过一个,则以“,”将其分隔,例如:
C=US,OU=SoftwareDevelop等
ValidForm 返回身份权限的起始时间
ValidUntil 返回身份权限的结束时间表 8-2 Client Certificate集合关键字表 8-3 Client Certificate集合关键字子字段 说明 子字段 说明
C 表示国家的名称 O 表示公司或组织的名称
CN 表示客户端的名称 OU 表示公司或组织中的部门名称
GN 表示客户端的用户名称(不包含姓) S 表示州或省的名称
I 表示客户的用户的姓氏 T 表示用户的职称
L 表示客户端的位置 L 表示客户端的位置通过 Clientcertificate集合,可以让不同的用户打开不同的网页 。 例如对于 A,B,C三个不同的用户打开不同的页面 。
<%if Request.Clientcertifcate ("subjectO")="A" then
Response.Redirect www.mysite.com/a.asp
elseif Request.Clientcertifcate ("subjectO")="B" then
Response.Redirect www.mysite.com/b.asp
elseif Request.Clientcertifcate ("subjectO")="C" then
Response.Redirect www.mysite.com/c.asp
else
Response.Redirect www.mysite.com/other.asp
endif
%>
8.3 上机练习在 Web网页中,表单是必不可少的元素,它对于
Web页面交互功能的实现起非常的作用 。
【 练习 8-1】 使用表单和 Form集合的技术,编写实现例
8-3中数据交换的 ASP程序,显示结果 。
图 8-13 数据交换的 ASP程序程序名为,lx8_1.asp,代码如下:
<%
xm=Request.Form("xm")
if xm<>"" then
Response.write "<FONT size=6 face=华文彩云 color= blue>欢迎登录本站点 !</FONT><p>"
Response.write "您的姓名是," & Request.Form("xm") & "<BR>"
Response.write "您的性别是," & Request.Form("xb") & "<BR>"
Response.write "您的密码是," & Request.Form("mm") & "<BR>"
Response.write "您的爱好是," & Request.Form("ah") & "<BR>"
Response.write "您的学历是," & Request.Form("xl") & "<BR>"
Response.write "您的生活格言是,"
Response.Write Request.Form("adage") & "<BR>"
Response.Write "<P align=center>这些信息对吗?"
Response.Write "<a href=lx8_1.asp>如不对,返回 </a></P>"
Response.end
end if
%>
<Form align=center Action="lx8_1.asp" Method="post">
<FONT size=6 face=华文彩云 color= blue>请输入您的有关数据 </FONT>
<TABLE ALIGN=Center BORDER=1>
<tr valign=baseline>
<td>姓名,<Input Type="text" Name="xm" Size=8>
<td>性别:男 <Input Type="radio" Name="xb" Value="男 " Checked>
女 <Input Type="radio" Name="xb" Value="女 ">
<td>密码,<Input Type="Password" Name="mm" Size=12>
<tr><td colspan=3>爱好:
<Input Type="Checkbox" Name="ah" value="音乐 ">音乐
<Input Type="Checkbox" Name="ah" value="汽车 ">汽车
<Input Type="Checkbox" Name="ah" value="钓鱼 ">钓鱼
<Input Type="Checkbox" Name="ah" value="集邮 ">集邮
<Input Type="Checkbox" Name="ah" value="绘画 ">绘画
<tr><td>学历,<br>
<Select Name="xl" style="width:100px" size=4>
<Option Value="小学 ">小学
<Option Value="中学 ">中学
<Option Value="大专 ">大专
<Option Value="本科 " Selected>本科
<Option Value="研究生 ">研究生
</select>
<td colspan=2>生活格言,<br>
<Textarea Name="adage" Cols=30 Rows=4></textarea>
</TABLE>
<p align=center><Input Type="Submit" Value="提交 ">
<Input Type="Reset" Value="重写 ">
</Form>
</BODY>
</HTML>
显示结果
【 练习 8-2】 利用 Querystring集合读取 HTTP查询字符串中的参数,编写实现例 8-8中数据交换的 ASP程序 。 程序名为,lx8_2.asp,代码如下:
<HTML>
<HEAD><TITLE>交互数据的表单 </TITLE></HEAD>
<BODY>
<P align=center><FONT size=6 face=华文彩云 color= blue>培训班通讯录 </FONT><p>
<%
xm=Request.Querystring("name")
if xm<>"" then
Response.write xm & "的联系方式是,<p><p>"
Response.write "电话," & Request.Querystring("tele") & "<br>"
Response.write " 住址," & Request.Querystring("add") &
"<p><p>"
Response.Write "<a href=lx8_2.asp>返回 </a>"
Response.end
end if
%>
<a href="lx8_2.asp?name=赵一 &Tele=1111111&Add=东风路 5号 ">
赵一 </a>
<a href="lx8_2.asp?name=钱二 &Tele=2222222&Add=中山南路 1
号 ">钱二 </a>
<a href="lx8_2.asp?name=张三 &Tele=3333333&Add=北京一路 25
号 ">张三 </a>
<a href="lx8_2.asp?name=李四 &Tele=4444444&Add=上海路 35号
">李四 </a>
<a href="lx8_2.asp?name=王五 &Tele=5555555&Add=天津中路 65
号 ">王五 </a>
<a href="lx8_2.asp?name=孙六 &Tele=6666666&Add=河南西路 58
号 ">孙六 </a>
</BODY>
</HTML>
显示结果
【 练习 8-3】 一个古老的游戏:石头,剪子,布 。
如图 8-15所示,游戏者用鼠标单击选择石头,剪子或布,计算机则随机选择,进行比赛 。
程序 lx8_3.asp的代码如下:
<%
player=request("choice")
if player=1 or player=2 or player=3 then
select case player
case 1
mychoice="石头 "
case 2
mychoice="剪子 "
case 3
mychoice="布 "
end select
randomize
Computer=int(rnd*3)+1
select case Computer
case 1
choice="石头 "
case 2
choice="剪子 "
case 3
choice="布 "
end select
if player-Computer=0 then
pp="平手! "
elseif player-Computer=-1 or player-Computer=2 then
pp="恭喜你,你赢了! "
else
pp="这次电脑赢了! "
end if
end if
%>
<html>
<title>石头、剪子、布小游戏 </title>
<body>
<Center>
<table border=1 align=center >
<COL span=2 width=100>
<tr align=center><td>玩家 <td>电脑
<tr align=center><td><%=mychoice%><td><%=choice%></tr>
<tr align=center><td colspan=2><%=pp%></tr>
</table>
<hr>
<form action=lx8_3.asp method=post name=f1>请选择:
<input type=radio name=choice value=1>石头
<input type=radio name=choice value=2>剪子
<input type=radio name=choice value=3>布 <p>
<script for=choice event=onclick language=vbscript>
f1.submit
</script>
</form>
</body>
</html>
说明:可以使用浏览器端的,htm程序来实现上述功能,参见第 6课 。
显示结果