<% = Resposne.CacheControl %><BR>
链接到每个方法是通过<A>链接元素,页面中唯一复杂的部分是Response.Cookies集合。通过只能访问cookie,读取Request.Cookies集合中的值。当访问Response.Cookie集合时,必须在发送任何输出到客户端之前结束对它的所有引用。因此在页面的上部,通过遍历集合创建页面的HTML放在一个局部字符串变量中。
StrCookies = “”
‘We can only read the key names and not the values because
‘the Response.Cookies collection is ‘write only’
For Each objItem In Response.Cookies
If Response.Cookies(objItem).HasKeys Then
‘Use another For Each to iterate all subkeys
For Each objItemKey in Response.Cookies(objItem)
StrCookies = strCookies & objItem & “(“ &objItemKey & “)<BR>”
Next
Else
‘print out the cookie as normal
strCookies = strCookies & objItem & “<BR>”
End If
Next
然后在页面的适当点上插入结果。
<P><DIV CLASS=”subhead”>The Response.Cookies Collection</DIV>
<I><A HREF=”cookies/setcookies.asp”>Response.Cookies</A>
is a write-only collection so the values cannot be displayed</I><BR>
<% = strCookies %>
ASP中的cookie的使用
在前面所看到页面中,一些集合、属性和方法已经链接到其他的页面,用来显示Request和Response对象的各个特性细节,我们将在本章的其余的部分研究这些内容,我们将学习那些提供给ASP代码使用的集合、方法和属性的各种技术。
在本章前面已经看到了如何使用Request.Cookies和Response.Cookies集合来创建和阅读cookie,点击上面两个页面中的任一个的“Cookies”链接时,这个页面包含一些设置了三个cookie的值的ASP代码,且在页面上显示被执行的代码,如下图所示:
点击“Show Cookies”的链接时,cookie的内容就显示出来了。这是通过遍历Request.Cookies集合而得到的,这与在上一页所用的方式完全相同,如下图所示:
这个屏幕图显示的是运行前面看到的设置cookie值的代码的结果。可能会看到其他已经存贮在计算机系统里的cookie。然而,假如现在关闭浏览器然后重新打开浏览器,然后运行显示cookie的页面,除了TimedCookie外,所有的cookie都不见了,这是由于只有这个TimedCookie具有有效期的设置,其他的在浏览器关闭时,自动消失了。
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)到响应之前完成这个工作。
上一页 [1] [2]