ASP30高级编程三.docx

上传人:b****2 文档编号:2435133 上传时间:2022-10-29 格式:DOCX 页数:4 大小:17.83KB
下载 相关 举报
ASP30高级编程三.docx_第1页
第1页 / 共4页
ASP30高级编程三.docx_第2页
第2页 / 共4页
ASP30高级编程三.docx_第3页
第3页 / 共4页
ASP30高级编程三.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ASP30高级编程三.docx

《ASP30高级编程三.docx》由会员分享,可在线阅读,更多相关《ASP30高级编程三.docx(4页珍藏版)》请在冰豆网上搜索。

ASP30高级编程三.docx

ASP30高级编程三

ASP3.0高级编程(三)

  访问和更新Cookies集合

Cookies的值比ASP其他集合的值要复杂得多。

Cookie是一小块由浏览器存贮在客户端系统上的文本,且随同每次请求发往它们应用于的域中的服务器。

ASP使得应用cookie较为容易,可以从Request对象的Cookies集合中获得所有随同请求发出的cookie值,并可创建或修改cookie,通过Response对象的Cookies集合发回给用户。

Cookie包含可用两种方式构造的信息,单值cookie提供其值给代码是通过一个一般的类ASP集合。

然而,集合的每个成员可能本身也是一个集合,包含这种信息的cookie通过称为多值cookie。

创建一个单值的cookie较为简单,如下所示:

(“item-name”)=“item-value”

创建一个多值的cookie,可以使用如下命令:

(“item-name”)(“sub-item-name”)=“sub-item-value”

设置cookie应用的域及路径及其有效期,我们使用:

(“item-name”).domain=“domain-url”

(“item-name”).path=“virtual-path”

(“item-name”).expires=#date#

通常,客户只在对创建cookie的目录中的页面提出请求时,才将cookie随请示发住服务器。

通过指定path属性,可以指定站点中何处这个cookie是合法的,并且这个cookie将随请求发送。

如果cookie随对整个站点的页面请求发送,设置path为“/”。

假如Expires属性没有设置,关闭当前的浏览器实例时,cookie将被自动消除。

注意,我们在向浏览器发送任何输出时,已经创建了cookie。

因为,这些cookie是页面HTTP报头的一部分。

在ASP中,缓冲的缺省状态是打开的,且没有输出被发送,除非使用指定做这个工作或者页面已到末端。

这意味着创建cookie的代码可以在页面上的任何位置,直到任何输出“刷新”到客户端前,它都可以被执行。

要读现有的cookie,使用集合。

可以单独访问其中的项目,方法类似于创建它们时使用的方法。

StrSingleValue=(“item-name”)

StrSubItemValue=(“item-name”)(“sub-item-name”)

注意集合是只读的。

集合是只写的,事实上可以访问这个集合中一系列cookie的名称,而不是它们的值。

遍历Cookies集合

为了使用Cookies集合更加方便,可使用名称为Haskeys的附加属性。

假如访问的cookie本身也是个集合,即它是一个多值的cookie,这将返回True。

使用Haskeys属性,可以遍历完整的集合,从而获得所有cookie的列表及它们的值。

ForEachobjItemIn

If(objItem).HasKeyThen

‘UseanotherForEachtoiterateallsubkeys

ForEachobjItemKeyin(objItem)

objItem&“(“&objItemKey&“)=“_

&(objItem)(objItemKey)&“

Next

Else

‘Printoutthecookiestringasnormal

objItem&“=”&(objItem)&“

EndIf

Next

这非常类似于前面的从集合中提取多个值的复杂代码。

但是这里可以使用Haskeys属性来判别每个条目是否为一个集合。

而在Form例子里,必须查询(item_name).Count属性,这是因为Form集合成员不可能是真正的集合。

ASP只是做了“幕后”的工作,得到了每个多条目集合的值。

Form和QueryString的差异

了解了访问各种ASP集合的技术以后,需要解决另一个问题是:

Form和QueryString集合之间的差异是什么?

假如准备使用ASP,毫无疑问应该清楚这种差异,但需要参考HTTP工作方式来重新认识,理解它们。

通过HTTP从Web服务器请求页面或其他资源,有两个通用的方法。

可使用GET方法直接获得资源,也可使用POST把值传给相应资源。

GET方法是缺省的,可以看一下本章前面的一个HTTP请求的实例:

  7/8/9910:

27:

16SentGET/Store/HTTP/

假如把一个或多个成对的名称/值附在请求页面的URL后,就变成请求的查询字符串,且在QueryString集合中提供给ASP页面。

单击Web页面、Email消息或其它文档的超链接,或在浏览器的地址栏中输入地址并按回车,或单击浏览器中的Links或Favorites按钮,所有这些都要使用GET方法。

因此,对这些动作中传递值给ASP的唯一方法是通过QueryString集合,把值附在URL后。

出现在集合中并被访问的值,与前面看到的Form集合实例中的工作方式相同。

URL和查询字符串的结合:

http:

///process_?

FirstName=Priscilla&LastName=Descartes

可以采用如下方式访问在QueryString集合中提供的值:

strFirstName=(“FirstName”)‘Return“Priscilla”

strLastName=(“LastName”)‘Return“Descartes”

strRaw= 

‘Return“FirstName=Priscilla&LastName=Descartes”

窗体的GET和POST方法

在一个页面内使用段时,可以设置打开的FORM标记的METHOD属性值为“GET”或“POST”,缺省值为“GET”。

假如使用“GET”或省略其属性,浏览器将该值绑定在页面所有控件上,成为一个查询字符串,且附在被请求页面的URL上。

当这个请求到达Web服务器时,其值由ASP的集合提供。

然而,假如设置METHOD属性为“POST”,浏览器将值包装进发送服务器的HTTP报头中,通过集合提供给ASP。

通过来说,可以在所有的HTML窗体中使用POST方法。

然而,浏览器或服务器的URL字符串长度存在一定的限制。

因此,附有长的字符串可能会引起溢出和某些字符串的字符被截掉。

同时,查询字符串出现在浏览器的地址栏和所有的保存的链接和收藏夹中。

不仅如此,还显露了通过Web服务器时在HTTP请求中不想显示的值,它也可能出现你的服务器和其他路由服务器的日志文件中。

在HTTP请求报头中的值很少是可见的,并且不出现在日志文件中。

使用POST方法需要注意的小问题是,当用户重新下载时,窗体的值将不再保留,其值为空且必须重新输入。

然而,当附在URL上时,其值被存储为一个链接,将被保留,因此将出现在所有的URL与字符串结合的请求中,这或许是个优点也可能是个缺点,这根据应用而定。

另一点是URL与查询字符串的结合体不能包含任何空格或其他非法字符,否则的话,Navigator和一些其他的浏览器将出现问题。

非法字符是那些用来分隔URL和查询字符串的部分,例如“/”、“:

”、“?

”和“&”。

ASP服务器对象提供URLEncode方法处理这种变换,以后章节讨论相关内容。

查看Request和Response对象内容

到目前,主要讨论了一些理论问题,没有列举特别的实例。

因为已经讨论过的内容多数情况下互相之间是密切相关的。

然而本书为这一章提供了一系列的实例页面,说明Request和Response对象的大多数属性。

应用所讲过的实例,能够理解这些页面,并可进行相应的修改,用它们作为试验实例。

本章及其他所有章节的代码样例均提供给用户,可以从Wrox出版社站点下载。

http:

///books/2610

http:

///Store/?

Code=2610

必须首先在Web服务器的WWWRoot内的子目录下安装实例,然后使用浏览器访问Chapter02子目录,使用:

http:

//your_server_name_or_IP/subdirectory_name/Chapter02/

这里your_server_name_or_IP/subdirectory_name是安装下载文件的本地路径。

1、查看Request对象成员

这提供一个包含选页的菜单用来试验Request和Response对象,首先选择UsingtheRequestObject,如下图所示:

  下图显示一个HTML窗体的实例,包含一些预先设置好的值,可以按自己的想法编辑这些值,然后点击“Submit”按钮。

这将打开一个页面,如下图所示,显示集合和TotalBytes属性的全部内容。

第一屏显示的是Form、QueryString和Cookies集合。

注意,假如在窗体页中编辑了HTML控件的值,对于Cookies集合以及其他的集合,在读者的计算机上的页面上可能显示不同的值。

可以从“FormCollection”段中看到窗体上的HTML控件的值如何在ASP的集合中表示。

也可以用原始的

2)修改现有的cookie

可以使用ASP修改现有的cookie,但不能只修改cookie中的一个值。

当更新一个在集合中的Cookie时,现有的值将丢失。

我们可以用如下代码创建一个cookie,可以使用:

(“VisitCount”)(“StartDate”)=dtmStart

(“VisitCount”)(“LastDate”)=Now

(“VisitCount”)(“Visits”)=CStr(intVisits)

(“VisitCount”).Path=“/”‘Applytoentiresite

(“VisitCount”).Expires=DateAdd(“m”,3,Now)

假如想要更新Visits和LastDate的值,必须先不需改变的所有值,然后重写整个的cookie:

datDtart=(“VisitCount”)(“StartDate”)

intVisits=(“VisitCount”)(“Visits”)

(“VisitCount”)(“StartDate”)=dtmStart

(“VisitCount”)(“LastDate”)=Now

(“VisitCount”)(“Visits”)=Cstr(intVisits)

(“VisitCount”).Path=“/”

(“VisitCount”).Expires=DateADD(“m”,3,Now+1)且对于几乎所有的其他Response方法和属性,应该在写入任何内容到响应之前完成这个工作。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1