Cookies、Session 和Application 对象很类似,也是一种集合对象,都是用来在保存数据。但
Cookies 和其它对象最大的不同是Cookies 将数据存放于客户端的磁盘上,而Application 以及
Session 对象是将数据存放于Server 端。Application、Section 以及Cookies 对象的差异如下表
所示:
物件 数据存放位置 生命周期
Application Server 端的内存上。 终止于IIS 关闭时。
Session 存放在Server 端的内存上。 终止于设定的时间或使用者离线。
Cookies 以档案的型式存放在客户端的磁盘上。可一直存在或终止于所设定的时间为止。
Cookies 对象不隶属于Page 对象,所以用法和Application 及Session 对象不同。Cookies 对象
分别属于Request 对象和Response 对象,每一个Cookie 变量都是被Cookies 对象所管理,它
的正确对象类别名称是HttpCookie Collection。要储存一个Cookie 变量,要透过Response 对
象的Cookies 集合;其使用语法如下:
Response.Cookies(Name As String).Value="资料"
而要取回Cookie,则是用Request 对象的Cookies 集合,并将指定的Cookie 传回;其使用语
法如下所示:
变数=Request.Cookies(Name As String).Value
Cookies 对象常用的属性如下表所示:
属性 说明 型态
All 传回全部的Cookie 变量到一个数组中。 HttpCookie()
AllKeys
传回全部Cookie 变量的名称到一个字符串型态的数
组中。
String()
Count 传回Cookie 变数的数量。 Integer
Item
以Cookie 变量名称或索引值来传回Cookie 变量的内
容。
1. Item(String)As
HttpCookie
2. Item(Index)As
HttpCookie
Cookies 对象常用的方法如下表所示:
方法 说明 语法
Add 新增一个Cookie 变量到Cookies 集合内。Add(ByVal cookie As HttpCookie)
Clear 将Cookies 集合内的变量全部清除。 Cookie Clear()
Get
以Cookie 变量名称或索引值传回Cookie
变量的值。
1. Get(ByVal index As Integer) As
HttpCookie
2. Get(ByVal name As String) As
HttpCookie
GetKey 以索引值来取回Cookie 变量名称。 GetKey(ByVal index As Integer) As String
Remove 以Cookie 变量名称移除Cookie 变数。 Remove(ByVal name As String)
Set 更新一个Cookie 变数的值。 Set(ByVal cookie As HttpCookie)
而Cookie 变量常用的属性如下:
属性 说明 型态
Expires
设定Cookie 变量的有效时间,默认值是1000 分钟。若设为0 则可以实时删
除Cookie 变量。
DateTime
Name 取得Cookie 变量的名称。 String
Value 取得或设定Cookie 变量的内容值。 String
下列范例新增两个Cookie 变数,并利用For...Next 循环分别利用Cookies 集合的Item 属性以
及Get 方法将Cookie 变量传回:
<Html>
<Script Language="VB" Runat="Server">
Sub Page_Load(Sender As Object,e As Eventargs)
Dim shtI As Short
Response.Cookies("Cookie1").Value="Microsoft VisualStudio .Net"
Response.Cookies("Cookie2").Value="ASP.Net"
For shtI=0 To Request.Cookies.Count-1
Response.Write("变量名称:" & Request.Cookies.Item(shtI).Name & _
"<br>变量内容:" & Request.Cookies.Get(shtI).Value &
"<br>")
Next
Response.Cookies.Clear()
End Sub
</Script>
</Html>
除了我们所加入的Cookie 变量之外,另外多了一个名为AspSessionId 的Cookie 变量。这个
Cookie 变量最主要是被ASP.NET 用来识别每个连结,由ASP.NET 在每个客户端建立连结时自
动产生;每一次的连结其AspSessionId 的内容都不同。
自订CookieCollection 及Cookie 物件
除了使用系统预设的Cookies 对象外,我们也可以自行定义属于自己的Cookies 对象。我们知
道Cookie 对象是属于CookieCollection 集合对象中的成员,所以我们可以自行在程序中宣告并
使用这些对象;这样的好处可以避免和一些系统所自动产生的Cookie 变量混杂。下列范例以上
述范例为基础,改为自定的Cookies 对象来操作Cookie 变量:
<Html>
<Script Language="VB" Runat="Server">
Sub Page_Load(Sender As Object,e As Eventargs)
Dim CookieCollection As HttpCookieCollection=New HttpCookieCollection
Dim Cookie1 As HttpCookie=New HttpCookie("Cookie1")
Dim Cookie2 As HttpCookie=New HttpCookie("Cookie2")
Cookie1.Value="Microsoft VisualStudio .NET"
Cookie2.Value="ASP.NET"
CookieCollection.Add(Cookie1) '将Cookie 对象加入Cookies 集合中
CookieCollection.Add(Cookie2)
Dim shtI As Short
For shtI=0 To CookieCollection.Count-1
Response.Write("变量名称=" & CookieCollection.Item(shtI).Name &
"<br>")
Response.Write("变量内容=" & CookieCollection.Get(shtI).Value &
"<p>")
Next
CookieCollection.Clear()
End Sub
</Script>
</Html>
上述范例中分别产生一个HttpCookieCollection 对象以及两个HttpCookie 对象。当我们在产生
HttpCookie 对象时至少要将Name 属性设定好,或者以下列的语法产生:
变量=New HttpCookie("Cookie 名称","数据")
当设产生Cookie1 及Cookie2 这两个变量后,我们就可以使用CookieCollection 对象的Add 方
法将Cookie 对象加入集合中;接着在循环中分别读出他们的变量名称及内容。我们观察执行结
果,发现系统Cookie 变量AspSessionId 就没有出现在我们所自订的Cookies 集合对象中了。
设定Cookie 变量的生命周期
Cookie 变量虽然存放在Client 端机器上,却也不是永远不会消失的。系统预设给Cookie 变量的
有效时间是1000 分钟,不过我们可以在程序中自行设定有效日期,只要指定Cookie 变量的
Expires 属性即可。使用语法如下所示:
Response.Cookies(CookieName).Expires=#日期#
若我们没有指定Expires 属性,则Cookie 变量将不会被储存 ,会像Session 一样浏览器关闭
结束浏览便被毁灭。 不过Cookie 一但设定有效期限后,除非我们将Expires 属性设为「dbNull」,
否则有日期期限的Cookie 无法被移除 。所谓「dbNull」值代表「空」值,「空」的意思是什么
都没有;所以有设定有效日期的Cookie 就可以被移除。下列范例在使用者登入后,在一个月内
浏览页都不需要再登入;并且每次登入时,程序自动将Cookie 有效期限往登入日期后延长一个
月:
<Html>
<ASP:Panel Id="Pan1" Runat="Server">
<Form Runat="Server">
<Table>
<Tr>
<Td>账号:</Td>
<Td><Asp:TextBox Id="txtID" Runat="Server" /></Td>
</Tr>
<Tr>
<Td>密码:</Td>
<Td><Asp:TextBox TextMode="Password" Id="txtPassword"
Runat="Server" /></Td>
</Tr>
</Table>
<ASP:Button Id="btnSubmit" Text="确定" OnClick="btnSubmit_Click"
Runat="Server"/>
<ASP:Button Id="btnReset" Text="清除" OnClick="btnReset_Click"
Runat="Server"/>
<ASP:Label Id="Label1" Text="请输入账号及密码" Runat="Server"/>
</Form>
</ASP:Panel>
<ASP:Panel Id="Pan2" Runat="Server">
Hi! <ASP:Label Id="lblMsg" Runat="Server"/> ,欢迎光临
</ASP:Panel>
<Script Language="VB" Runat="Server">
Sub Page_Load(Sender As Object,e As EventArgs)
If Request.Cookies.Item("MyWeb_UserID")=dbNull Or _
Request.Cookies.Item("MyWeb_UserID").Value="" Then
Pan2.Visible=False
Else
Response.Cookies.Item("MyWeb_UserID").Expires=Now.AddMonths(1)
lblMsg.Text=Request.Cookies.Item("MyWeb_UserID").Value
Pan1.Visible=False
End If
End Sub
Sub btnSubmit_Click(Sender As Object, e As EventArgs)
If txtID.Text="charles" and txtPassword.Text="1234" Then
Response.Cookies("MyWeb_UserID").Value=txtID.Text
Response.Cookies.Item("MyWeb_UserID").Expires=Now.AddMonths(1)
Pan1.Visible="False"
Pan2.Visible="True"
lblMsg.Text=txtID.Text
End If
End Sub
Sub btnReset_Click(Sender As Object, e As EventArgs)
txtID.Text=""
txtPassword.Text=""
End Sub
</Script>
</Html>
上述程序代码范例中我们使用两个Panel,分别为Pan1 以及Pan2;Pan1 为要求使用者输入账
号及密码,而Pan2 则为欢迎语。程序执行时若使用者的Cookie 不存在或没有数据,将欢迎语
隐藏;如下列程序代码片段所示:
Sub Page_Load(Sender As Object,e As EventArgs)
If Request.Cookies.Item("MyWeb_UserID")=dbNull Or _
Request.Cookies.Item("MyWeb_UserID").Value="" Then
Pan2.Visible=False
Else
Response.Cookies.Item("MyWeb_UserID").Expires=Now.AddMonths(1)
lblMsg.Text=Request.Cookies.Item("MyWeb_UserID").Value
Pan1.Visible=False
End If
End Sub
上列程序代码片段中我们先判断Cookie 对象是否存在,以及确定Cookie 中是有内容;如果
Cookie 不存在或是Cookie 内没有资料,则显示Pan1 要求使用者登入的画面;倘若Cookie 存
在,则显示Pan2 出现欢迎语:
使用者若输入正确的使用者名称后,我们便将使用者账号写入Cookie 中,并指定有效期限为一
个月内;如下程序代码片段所示:
Sub btnSubmit_Click(Sender As Object, e As EventArgs)
If txtID.Text="charles" and txtPassword.Text="1234" Then
Response.Cookies("MyWeb_UserID").Value=txtID.Text
Response.Cookies.Item("MyWeb_UserID").Expires=Now.AddMonths(1)
Pan1.Visible="False"
Pan2.Visible="True"
lblMsg.Text=txtID.Text
End If
End Sub
下次使用者再浏览网页的时候,只要在一个月内有登入过,就不需要再输入使用者账号及密码。
Cookie集合基础
原创文章如转载,请注明:转载自悠悠博客 [ http://www.ajaxstu.com/ ]
相关文章:
- 同一个用户不允许同时登陆两次(2007-11-15 1:17:43)
- 罗列全部session和application(2007-11-12 6:26:16)
- 访问和更新Cookies集合(2007-11-11 1:42:29)
- asp中cookie使用示例(2007-11-7 3:2:28)
- asp重定向-response.redirect和server.transfer(2007-10-24 9:18:30)
- vbscript Replace 函数(2007-10-21 4:33:2)
- asp:Server对象(2007-10-11 7:9:58)
- vbscript:日期格式常数(2007-10-10 7:30:49)
- ASP动态包含文件的改进方法(2007-10-8 1:5:48)
- For...Next 语句(2007-10-4 9:43:2)
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。