帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP.NET编程 >
ASP.NET中Cookie编程的基础知识(4)
作者:Microsoft 发布时间:2005-03-12 来源:ASPCOOL
     读取 Cookie
  
    当浏览器向服务器发送请求时,该服务器的 Cookie 会与请求一起发送。在 ASP.NET 应用程序中,您可以使用 Request 对象来读取 Cookie。Request 对象的结构与 Response 对象的结构基本相同,所以从 Request 对象中读取 Cookie 的方法与向 Response 对象中写入 Cookie 的方法非常类似。以下示例显示了两种方法,目的都是获取名为“username”的 Cookie 的值并将值显示在 Label 控件中:
  
  If Not Request.Cookies("userName") Is Nothing Then
  Label1.Text = Server.HtmlEncode(Request.Cookies("userName").Value)
  End If
  
  If Not Request.Cookies("userName") Is Nothing Then
  Dim aCookie As HttpCookie = Request.Cookies("userName")
  Label1.Text = Server.HtmlEncode(aCookie.Value)
  End If
  
    在获取 Cookie 的值之前,应该确保该 Cookie 确实存在。否则,您将得到一个 System.NullReferenceException(英文)异常。还需要注意的是,在页面中显示 Cookie 的内容之前,我调用了 HttpServerUtility.HtmlEncode(英文)方法对 Cookie 的内容进行编码。之所以这样做,是因为我要显示 Cookie 的内容(一般您不会这样做)而且要确保没有任何恶意用户在 Cookie 中添加了可执行脚本。有关 Cookie 安全性的详细信息,请参阅 Cookie 和安全性。
  
    注意:由于不同的浏览器保存 Cookie 的方式也不同,所以同一台计算机上的不同浏览器不一定能够相互读取各自的 Cookie。例如,如果使用 Internet Explorer 测试一个页面,然后再使用其他浏览器进行测试,那么后者就不会找到 Internet Explorer 保存的 Cookie。当然,大多数人一般都是使用同一种浏览器进行 Web 交互的,因此在大多数情况下不会出现问题。但有时还是会遇到问题,比如您要测试应用程序对浏览器的兼容性。
  
    读取 Cookie 中子键值的方法与设置该值的方法类似。以下是获取子键值的一种方法:
  
  If Not Request.Cookies("userInfo") Is Nothing Then
  Label1.Text = _
  Server.HtmlEncode(Request.Cookies("userInfo")("userName"))
  Label2.text = _
  Server.HtmlEncode(Request.Cookies("userInfo")("lastVisit"))
  End If
  
    在上面的示例中,我获取的是子键“lastVist”的值,在此前的讨论中我把该值设置为 DateTime 值的字符串表示形式。请记住,Cookie 是用字符串的形式保存值的,所以要将 lastVisit 值用作日期,就必须对其进行转换:
  
  Dim dt As DateTime
  dt = CDate(Request.Cookies("userInfo")("lastVisit"))
  
    Cookie 中子键的类型是 NameValueCollection(英文)类型的集合。因此,另一种获取单个子键的方法是先获取子键集合,然后按名称提取子键的值,如下所示:
  
  If Not Request.Cookies("userInfo") Is Nothing Then
  Dim UserInfoCookieCollection As _
  System.Collections.Specialized.NameValueCollection
  UserInfoCookieCollection = Request.Cookies("userInfo").Values
  Label1.Text = Server.HtmlEncode(UserInfoCookieCollection("userName"))
  Label2.Text = Server.HtmlEncode(UserInfoCookieCollection("lastVisit"))
  End If
  
    就像设置 Cookie 一样,使用哪种方法读取 Cookie 也由您自己决定。
  
    什么是有效期?
  
    您可以读取 Cookie 的名称和值,除此以外,需要了解的有关 Cookie 的信息并不是很多。虽然您可以获取 Domain 和 Path 属性,但是这些属性的用途很有限。例如,您可以读取 Domain 属性,但如果您的页面与 Cookie 不在相同的域,您根本就不会在页面的位置接收到该 Cookie。
  
    您无法读取的是 Cookie 的过期日期和时间。事实上,当浏览器向服务器发送 Cookie 信息时,浏览器并未将过期信息包括在内。您可以读取 Expires 属性,但总是返回为零的日期/时间值。
  
    在前面的编写 Cookie 一节中,我已经讲过,是浏览器负责管理 Cookie 的,Expires 属性就很好地印证了这一点。Expires 属性的主要作用是帮助浏览器执行有关 Cookie 保存的日常管理。从服务器的角度来看,Cookie 要么存在要么不存在,所以对服务器而言,有效期并不是有用的信息。所以,浏览器在发送 Cookie 时并不提供此信息。如果您需要 Cookie 的过期日期,就必须重新设置,关于这一点我将在修改和删除 Cookie 中介绍。
  
    更确切地说,您可以在向浏览器发送 Cookie 之前读取已在 Response 对象中设置的 Expires 属性,但您无法从返回的 Request 对象中获取有效期信息。
  
  

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·ASP.NET应用程序规划与设计(4)  (2005-03-12)
 ·ASP.NET应用程序规划与设计(3)  (2005-03-12)
 ·ASP.NET应用程序规划与设计(2)  (2005-03-12)
 ·ASP.NET应用程序规划与设计(1)  (2005-03-12)
 ·ASP.NET 页面对象模型  (2005-03-12)
 ·白刃之战:PHP vs. ASP.NET(节选  (2005-03-12)
 ·ASP.NET中Cookie编程的基础知识(  (2005-03-12)
 ·ASP.NET中Cookie编程的基础知识(  (2005-03-12)
 ·[ASP.NET] Session 详解  (2005-03-12)
 ·ASP.NET中的Http Handles  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·放眼未来 帝国近期将有重大举措!
·PHPWind6.3.2版通行证发布
·帝国备份王2008版正式发布
·帝国备份王2008版发布
·phpcms2007转帝国CMS5.0程序发布
·dedecms5.1转帝国CMS5.0程序发布
·帝国网站管理系统V5.0商业购买说明
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统