欢迎光临
我们一直在努力

在ASP中访问和更新Cookies集合-ASP教程,ASP技巧

建站超值云服务器,限时71元/月

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)到响应之前完成这个工作。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在ASP中访问和更新Cookies集合-ASP教程,ASP技巧
分享到: 更多 (0)