快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

ASP.NET中Cookie编程的基础知识(5)

读取 Cookie 集合

  前面的示例假设您要读取名称已知的 Cookie。有时,您可能需要读取可供页面使用的所有 Cookie。要读取可供页面使用的所有 Cookie 的名称和值,您可以利用如下代码遍历 Request.Cookies 集合:

Dim i As Integer
Dim output As String = \"\"
Dim aCookie As HttpCookie
For i = 0 to Request.Cookies.Count - 1
aCookie = Request.Cookies(i)
output &= \"Cookie 名称 = \" & Server.HtmlEncode(aCookie.Name) & \"<br>\"
output &= \"Cookie 值 = \" & Server.HtmlEncode(aCookie.Value) & _
& \"<br><br>\"
Next
Label1.Text = output

  注重:运行此代码时,您很可能会看到一个名为“ASP.NET_SessionId”的 Cookie,ASP.NET 用这个 Cookie 来保存您的会话的唯一标识符。这个会话 Cookie 不会永久保存到您的硬盘上。有关会话 Cookie 的具体信息,请参阅本文后面的 Cookie 和会话状态。
前面的示例有一个限制:假如 Cookie 有子键,就会以一个单独的名称/值字符串来显示子键。Cookie 的 HasKeys(英文)属性可以告诉您该 Cookie 是否有子键。假如有子键,您可以在子键集合中向下钻取,获取各个子键的名称和值。

  如前文所述,您可以从 Cookie 属性 Values(英文)中获取有关子键的信息,该属性是类型 NameValueCollection 的集合。您可以根据索引值从 Values 集合中直接读取子键值。相应的子键值可以从 Values 集合的成员 AllKeys(英文)中得到,该成员将返回一个字符串集合。

  以下示例是对前一示例的修改。示例中使用 HasKeys 属性来测试子键,假如检测到子键,就从 Values 集合中获取子键:

Dim i As Integer
Dim j As Integer
Dim output As String = \"\"
Dim aCookie As HttpCookie
Dim subkeyName As String
Dim subkeyValue As String
For i = 0 To Request.Cookies.Count - 1
aCookie = Request.Cookies(i)
output &= \"名称 = \" & aCookie.Name & \"<br>\"
If aCookie.HasKeys Then
For j = 0 To aCookie.Values.Count - 1
subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys(j))
subkeyValue = Server.HtmlEncode(aCookie.Values(j))
output &= \"子键名称 = \" & subkeyName & \"<br>\"
output &= \"子键值 = \" & subkeyValue & \"<br><br>\"
Next
Else
output &= \"值 = \" & Server.HtmlEncode(aCookie.Value) & \"<br><br>\"
End If
Next
Label1.Text = output

  您也可以把子键作为 NameValueCollection 对象进行提取,如下所示:

If aCookie.HasKeys Then
Dim CookieValues As _
System.Collections.Specialized.NameValueCollection = aCookie.Values
Dim CookieValueNames() As String = CookieValues.AllKeys
For j = 0 To CookieValues.Count ?C 1
subkeyName = Server.HtmlEncode(CookieValueNames(j))
subkeyValue = Server.HtmlEncode(CookieValues(j))
output &= \"子键名称 = \" & subkeyName & \"<br>\"
output &= \"子键值 = \" & subkeyValue & \"<br><br>\"
Next
Else
output &= \"值 = \" & aCookie.Value & \"<br><br>\"
End If

  注重:请记住,我之所以调用 Server.HtmlEncode 方式,只是因为我要在页面上显示 Cookie 的值。假如您只是测试 Cookie 的值,就不必在使用前对其进行编码。

  修改和删除 Cookie

  有时,您可能需要修改某个 Cookie,更改其值或延长其有效期。(请记住,由于浏览器不会把有效期信息传递到服务器,所以您无法读取 Cookie 的过期日期。)

  当然,实际上您并不是直接更改 Cookie。尽管您可以从 Request.Cookies 集合中获取 Cookie 并对其进行操作,但 Cookie 本身仍旧存在于用户硬盘上的某个地方。因此,修改某个 Cookie 实际上是指用新的值创建新的 Cookie,并把该 Cookie 发送到浏览器,覆盖客户机上旧的 Cookie。

  以下示例说明了如何更改用于储存站点访问次数的 Cookie 的值:

Dim counter As Integer
If Request.Cookies(\"counter\") Is Nothing Then
counter = 0
Else
counter = CInt(Request.Cookies(\"counter\").Value)
End If
counter += 1
Response.Cookies(\"counter\").Value = counter.ToString
Response.Cookies(\"counter\").Expires = DateTime.Now.AddDays(1) 

  或者:

Dim ctrCookie As HttpCookie
Dim counter As Integer
If Request.Cookies(\"counter\") Is Nothing Then
ctrCookie = New HttpCookie(\"counter\")
Else
ctrCookie = Request.Cookies(\"counter\")
End If
counter = CInt(ctrCookie.Value) + 1
ctrCookie.Value = counter.ToString
ctrCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(ctrCookie)


返回类别: 教程
上一教程: 关于Microsoft.NET Beta1与Visual Studio.NET Alpha不兼容
下一教程: 在Internet上用通过.Net Remoting机制实现服务器对客户端的直接调用

您可以阅读与"ASP.NET中Cookie编程的基础知识(5)"相关的教程:
· ASP.NET中Cookie编程的基础知识(6)
· ASP.NET中Cookie编程的基础知识(4)
· ASP.NET中Cookie编程的基础知识(1)
· ASP.NET中Cookie编程的基础知识(3)
· ASP.NET中Cookie编程的基础知识(2)
    微笑服务 优质保证 索取样品