首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 冲浪宝典-> 冲浪技巧
在ASP中访问和更新Cookies集合-ASP教程,ASP技巧
作者:网友供稿 点击:66
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
cookies的值比asp其他集合(例如form和servervariables)的值要复杂得多。cookie是一小块由浏览器存贮在客户端系统上的文本,且随同每次请求发往它们应用于的域中的服务器。

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

  cookie包含可用两种方式构造的信息,单值cookie提供其值给代码是通过一个一般的类asp集合。然而,集合的每个成员可能本身也是一个集合,包含这种信息的cookie通过称为多值(multiple-value)cookie。

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

response.cookies(“item-name”) = “item-value”

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

response.cookies(“item-name”)(“sub-item-name”) = “sub-item-value”

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

response.cookies(“item-name”).domain = “domain-url”
response.cookies(“item-name”).path = “virtual-path”
response.cookies(“item-name”).expires = #date#

  通常,客户只在对创建cookie的目录中的页面提出请求时,才将cookie随请示发住服务器。通过指定path属性,可以指定站点中何处这个cookie是合法的,并且这个cookie将随请求发送。如果cookie随对整个站点的页面请求发送,设置path为“/”。

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

  注意,我们在向浏览器发送任何输出时,已经创建了cookie。因为,这些cookie是页面http报头的一部分。

  在asp 3.0中,缓冲的缺省状态是打开的,且没有输出被发送,除非使用response.flush指定做这个工作或者页面已到末端。这意味着创建cookie的代码可以在页面上的任何位置,直到任何输出“刷新”(flush)到客户端前,它都可以被执行。

  要读现有的cookie,使用request.cookies集合。可以单独访问其中的项目,方法类似于创建它们时使用的方法。

strsinglevalue = request.cookies(“item-name”)
strsubitemvalue = request.cookies(“item-name”)(“sub-item-name”)

  注意request.cookies集合(和所有其他request集合一样)是只读的。response.cookies集合是只写的,事实上可以访问这个集合中一系列cookie的名称,而不是它们的值。

  遍历cookies集合

  为了使用cookies集合更加方便,可使用名称为haskeys的附加属性。假如访问的cookie本身也是个集合,即它是一个多值的cookie,这将返回true。使用haskeys属性,可以遍历完整的request.cookies集合,从而获得所有cookie的列表及它们的值。

for each objitem in request.cookies
if request.cookies(objitem).haskey then
‘use another for each to iterate all subkeys
for each objitemkey in request.cookies(objitem)
response.write objitem & “(“ & objitemkey & “) = “_
& request.cookies(objitem)(objitemkey) & “<br>”
next
else
‘print out the cookie string as normal
response.write objitem & “ = ”& request.cookies(objitem) & “<br>”
end if
next

  这非常类似于前面的从request.form集合中提取多个值的复杂代码。但是这里可以使用haskeys属性来判别每个条目是否为一个集合。而在form例子里,必须查询request.form(item_name).count属性,这是因为form集合(和所有的除cookie外的其他集合)成员不可能是真正的集合。asp只是做了“幕后”的工作,得到了每个多条目集合的值。

  form和querystring的差异

  了解了访问各种asp集合的技术以后,需要解决另一个问题是:form和querystring集合之间的差异是什么?假如准备使用asp,毫无疑问应该清楚这种差异,但需要参考http工作方式来重新认识,理解它们。

  通过http从web服务器请求页面或其他资源,有两个通用的方法。可使用get方法直接获得资源,也可使用post把值传给相应资源。get方法是缺省的,可以看一下本章前面的一个http请求的实例:

  7/8/99 10:27:16 sent get /store/download.asp http/1.1

  假如把一个或多个成对的名称/值附在请求页面的url后,就变成请求的查询字符串,且在querystring集合中提供给asp页面。单击web页面、email消息或其它文档的超链接,或在浏览器的地址栏中输入地址并按回车,或单击浏览器中的links或favorites按钮,所有这些都要使用get方法。

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

  出现在request.querystring集合中并被访问的值,与前面看到的form集合实例中的工作方式相同。url和查询字符串的结合:

  http://mysite.com/process_page.asp?firstname=priscilla&lastname=descartes

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

strfirstname = request.querystring(“firstname”) ‘return “priscilla”
strlastname = request.querystring(“lastname”) ‘return “descartes”
strraw = request.querystring
‘return “firstname=priscilla&lastname=descartes”

  窗体的get和post方法

  在一个页面内使用<form>段时,可以设置打开的form标记的method属性值为“get”或“post”,缺省值为“get”。假如使用“get”或省略其属性,浏览器将该值绑定在页面所有控件上,成为一个查询字符串,且附在被请求页面的url上。

  当这个请求到达web服务器时,其值由asp的request.querystring集合提供。然而,假如设置method属性为“post”,浏览器将值包装进发送服务器的http报头中,通过request.form集合提供给asp。

  通过来说,可以在所有的html窗体中使用post方法。然而,浏览器或服务器的url字符串长度存在一定的限制。因此,附有长的字符串可能会引起溢出和某些字符串的字符被截掉。同时,查询字符串出现在浏览器的地址栏和所有的保存的链接和收藏夹中。不仅如此,还显露了通过web服务器时在http请求中不想显示的值,它也可能出现你的服务器和其他路由服务器的日志文件中。在http请求报头中的值很少是可见的,并且不出现在日志文件中。

  使用post方法需要注意的小问题是,当用户重新下载<form>时,窗体的值将不再保留,其值为空且必须重新输入。然而,当附在url上时,其值被存储为一个链接,将被保留,因此将出现在所有的url与字符串结合的请求中,这或许是个优点也可能是个缺点,这根据应用而定(一些浏览器在客户端上能够在一定范围内自动保留一个页面上的值)。

  另一点是url与查询字符串的结合体不能包含任何空格或其他非法字符,否则的话,navigator和一些其他的浏览器将出现问题。非法字符是那些用来分隔url和查询字符串的部分,例如“/”、“:”、“?”和“&”(ie能够自动将空格转换为正确的格式——加号“+”,但其他的非法字符不能处理)

  asp中的cookie的使用

  在这一节我们将学习那些提供给asp代码使用的集合、方法和属性的各种技术。

  1) cookie中存储用户的细节情况

  可以使用cookie来存储这两类值:当浏览器关闭时我们不想保存的值(例如用户的注册信息)以及在用户访问站点时要保留的值。在每种情况下cookie的值对于来自用户浏览器的每个页面请求的asp都是可用的。

  然而,需要记住的是,cookie只有在对cookie中的虚拟路径(path)内的页面发出请求时,才会发往服务器。缺省时,假如path的值在cookie中没有设置,则其值为创建cookie的页面的虚拟路径。为使一个cookie发往一个站点的所有页面,需要使用path=“/”。
这里是个实例,从自定义的login页面中,将用户的注册信息存贮在一个cookie中,由于没有应用有效期,cookie值仅在关闭这个浏览器这前保留:

...
request.cookies(“user”)(“uid”) = “<% = request(“username”) %>”
request.cookies(“user”)(“pwd”) = “<% = request(“password”) %>”
request.cookies(“user”).path = “/adminstuff” ‘only applies to admin pages
...

  现在,在用户从adminstuff目录或其子目录请求的每个页面中,都可以找到这个cookie。假如它不存在,可以将用户重定向到注册页面:

if (request.cookies(“user”)(“uid”) <> “alexhomer”) _
or (request.cookies(“user”)(“pwd”) <> “secret”) then
response.redirect “login.asp?username=” & request.cookies(“user”)(“uid”)
end if
...

  由于把cookie中的用户名放在response.redirect的url查询字符串中,假如在口令输入时出现错误且希望用户不必重新键入用户名,可以在login.asp页面中使用它:

<form action=”check_user.asp” method=”post”>
<input type=”text” name=”username”
value=”<% = request.querystring(“username”) %>”><p>
<input type=”submit” value=”login”>
</form>

  2) 修改现有的cookie

  可以使用asp修改现有的cookie,但不能只修改cookie中的一个值。当更新一个在response.cookies集合中的cookie时,现有的值将丢失。我们可以用如下代码创建一个cookie,可以使用:

response.cookies(“visitcount”)(“startdate”) = dtmstart
response.cookies(“visitcount”)(“lastdate”) = now
response.cookies(“visitcount”)(“visits”) = cstr(intvisits)
response.cookies(“visitcount”).path = “/” ‘apply to entire site
response.cookies(“visitcount”).expires = dateadd(“m”,3,now)

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

datdtart = response.cookies(“visitcount”)(“startdate”)
intvisits = response.cookies(“visitcount”)(“visits”)
response.cookies(“visitcount”)(“startdate”) = dtmstart
response.cookies(“visitcount”)(“lastdate”) = now
response.cookies(“visitcount”)(“visits”) = cstr(intvisits)
response.cookies(“visitcount”).path = “/”
response.cookies(“visitcount”).expires = dateadd(“m”,3,now + 1)且对于几乎所有的其他response方法和属性,应该在写入任何内容(即打开<html>标记或任何文本或其他的html)到响应之前完成这个工作。


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·不用SQL语句查询DataTable中的数据-.NET教程,数据库应用
·一个asp模板类-ASP教程,ASP应用
·谈有线电视系统前端设备调试
·表单提交“GET”的用法(form所有提交的值都会在地址栏出现)-ASP教程,ASP应用
·-48v整流器配置与直流系统设置
·c#下重写BUTTON控件-.NET教程,C#语言
·catv网络常见及疑难故障的分析处理
·常用路由协议的分析及比较
·mpls的体系结构与组网技术
·初级:.net框架下的MD5-.NET教程,.NET Framework
最新文章
·在线高速免费收看英超比赛的方法_冲浪技巧
·为什么成功的论坛和博客无法双管其下_站长心得
·做好一个好的网站策划_网络编辑
·windows live folders 新鲜试用_冲浪技巧
·什么样的网站放google adsense最理想_网赚技巧
·被google adsense 除名后怎么办_网赚技巧
·刘韧:站长站在草根与神话之间_站长访谈
·张弛有度的google adsense_google推广
·浏览器内嵌流媒体播放器silverlight_冲浪技巧
·高分辨率下界面布局的解决方案4_站长心得
相关主题
  • 在ASP中使用脚本语言-ASP教程,ASP应用
  • 在ASP中自动创建多级文件夹的函数(使用FSO)-ASP教程,ASP技巧
  • 在ASP中轻松实现记录集分页显示-ASP教程,ASP技巧
  • 在ASP中操作HTTP报头方法分析-ASP教程,ASP技巧
  • 在ASP中利用“正则表达式” 对象实现UBB风格的论坛-ASP教程,正则表达式
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭