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

asp.net|cookie|编程

查看您的 Cookie

  您可能会发现,了解创建 Cookie 的效果会对您很有帮助。而查看 Cookie 是比较容易的,因为它们都是文本文件,关键在于您能找到它们。不同的浏览器保存 Cookie 的方式也不同。我将介绍 Internet Explorer 是如何保存 Cookie 的。如果您使用的是其他浏览器,请查看该浏览器的帮助,以了解有关 Cookie 处理方面的知识。

  查看 Cookie 的一个简便方法是让 Internet Explorer 为您查找。在 Internet Explorer 中,从“工具”菜单中选择“Internet 选项”,在“常规”选项卡中单击“设置”,然后单击“查看文件”。Internet Explorer 将打开一个窗口,显示所有的临时文件,包括 Cookie。在窗口中查找以“Cookie:”开头的文件 或查找文本文件。双击一个 Cookie,在默认的文本文件中打开它。

  您也可以在硬盘上查找 Cookie 的文本文件,从而打开 Cookie。Internet Explorer 将站点的 Cookie 保存在文件名格式为 <user>@<domain>.txt 的文件中,其中 <user> 是您的帐户名。例如,如果您的名称为 mikepope,您访问的站点为 www.contoso.com,那么该站点的 Cookie 将保存在名为 mikepope@www.contoso.txt 的文件中。(该文件名可能包含一个顺序的编号,如 mikepope@www.contoso[1].txt。)

  这个 Cookie 文本文件是与用户相关的,所以会按照帐户分别保存。例如,在 Windows XP 中,您可以在如下所示的目录中找到 Cookie 文件:

c:\Documents and Settings\<user>\Cookies

  要查找最新创建的 Cookie,可以按修改日期对目录内容进行排序,并查找最近修改的文件。

  您可以使用文本编辑器打开 Cookie。如果该文件包含多个 Cookie,这些 Cookie 之间将用星号 (*) 分隔。每个 Cookie 的第一行是 Cookie 的名称,第二行是值,其余各行则包含 Cookie 的日常处理信息,例如过期日期和时间。Cookie 中还有一个简单的校验和,如果更改 Cookie 名称或值的长度,浏览器就会检测到修改并删除该 Cookie。

  多值 Cookie(子键)

  以上示例为每个要保存的值(用户名、上次访问时间)都使用了一个 Cookie 。您也可以在一个 Cookie 中保存多个名称/值对。名称/值对也称作“键”或“子键”,具体取决于您读取的内容。(如果您熟悉 URL 的结构,就会发现子键与其中的查询字符串非常相象。) 例如,如果不希望创建名为“userName”和“lastVisit”的两个单独的 Cookie,可以创建一个名为“userInfo”的 Cookie,并使其包含两个子键:“userName”和“lastVisit”。

  有很多原因会让我们用子键来代替单独的 Cookie。最显而易见的是,把相关或类似的信息放在一个 Cookie 中会比较有条理。另外,由于所有信息都在一个 Cookie 中,所以诸如有效期之类的 Cookie 属性就适用于所有信息。(当然,如果要为不同类型的信息指定不同的过期日期,就应该把信息保存在单独的 Cookie 中。)

  带有子键的 Cookie 还可以帮助您减小 Cookie 的大小。如前面的 Cookie 的限制一节所述,Cookie 的总大小限制在 4096 字节以内,而且不能为一个网站保存超过 20 个 Cookie。利用带子键的单个 Cookie,站点的 Cookie 数量就不会超过 20 个的限制。此外,一个 Cookie 会占用大约 50 个字符的基本空间开销(用于保存有效期信息等),再加上其中保存的值的长度,其总和接近 4K 的限制。如果使用五个子键而不是五个单独的 Cookie,您可以省去四个 Cookie 的基本空间开销,总共能节省大约 200 个字节。

  要创建带子键的 Cookie,您可以使用用于编写单个 Cookie 的各种语法。以下示例显示了编写同一 Cookie 的两种不同方法,其中的每个 Cookie 都带有两个子键:

Response.Cookies("userInfo")("userName") = "mike"
Response.Cookies("userInfo")("lastVisit") = DateTime.Now.ToString
Response.Cookies("userInfo").Expires = DateTime.Now.AddDays(1)

Dim aCookie As New HttpCookie("userInfo")
aCookie.Values("userName") = "mike"
aCookie.Values("lastVisit") = DateTime.Now.ToString
aCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie)

  控制 Cookie 有效范围

  默认情况下,一个站点的全部 Cookie 都一起保存在客户机上,而且所有这些 Cookie 都会随着对该站点发送的请求一起发送到服务器,也就是说,站点的每个页面都能得到该站点的所有 Cookie。但有时候,您可能希望 Cookie 更具有针对性,这时,您可以通过两种方法设置 Cookie 的有效范围:

  把 Cookie 的有效范围限制在服务器上的一个文件夹中,实际上这样就将 Cookie 限制到站点上的某个应用程序。

  把有效范围设置为某个域,从而允许您指定域中的哪些子域可以访问 Cookie。

  将 Cookie 限制到某个文件夹或应用程序

  要将 Cookie 限制到服务器上的某个文件夹,请按如下方法设置 Cookie 的 Path 属性:

Dim appCookie As New HttpCookie("AppCookie")
appCookie.Value = "written " & Now.ToString
appCookie.Expires = Now.AddDays(1)
appCookie.Path = "/Application1"
Response.Cookies.Add(appCookie)

  当然,您也可以通过直接设置 Response.Cookies 来编写 Cookie,如前文所述。

  路径可以是站点根目录下的物理路径,也可以是虚拟根目录。这样一来,Cookie 就只能用于 Application1 文件夹或虚拟根目录中的页面。例如,如果您的站点名为 www.contoso.com,则前面示例中生成的 Cookie 就只能用于路径为 http://www.contoso.com/Application1/ 的页面以及该文件夹下的所有页面,而不适用于其他应用程序中的页面,如 http://www.contoso.com/Application2/ 或 http://www.contoso.com/ 下的页面。

  提示:通过对 Internet Explorer 和 Mozilla 浏览器进行测试发现,此处使用的路径是区分大小写的。一般而言,Windows 服务器上的 URL 不区分大小写,但这种情况例外。您无法控制用户如何在浏览器中输入 URL,但是,如果您的应用程序依赖于与特定路径相关的 Cookie,则请确保您所创建的所有超链接中的 URL 与 Path 属性值的大小写相匹配。

  将 Cookie 的有效范围限制到域

  默认情况下,Cookie 与特定的域相关联。例如,如果您的站点是 www.contoso.com,那么当用户向该站点请求页面时,您编写的 Cookie 就被发送到服务器。(有特定路径值的 Cookie 除外,我在上一节刚刚解释过。) 如果您的站点有子域(例如 contoso.com、sales.contoso.com 和 support.contoso.com),就可以把 Cookie 同特定的子域相关联。为此,需要设置 Cookie 的 Domain 属性,如下所示:

Response.Cookies("domain").Value = DateTime.Now.ToString
Response.Cookies("domain").Expires = DateTime.Now.AddDays(1)
Response.Cookies("domain").Domain = "support.contoso.com"

  如果按照这种方式设置域,则 Cookie 只能用于指定子域中的页面。

  您也可以利用 Domain 属性来创建可在多个子域中共享的 Cookie。例如,对域进行如下设置:

Response.Cookies("domain").Value = DateTime.Now.ToString
Response.Cookies("domain").Expires = DateTime.Now.AddDays(1)
Response.Cookies("domain").Domain = "contoso.com"

  这样,该 Cookie 就可用于主域、sales.contoso.com 和 support.contoso.com。

时间: 2024-10-11 20:55:36

ASP.NET中Cookie编程的基础知识(3)的相关文章

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

asp.net|cookie|编程 简介 Cookie 为 Web 应用程序保存用户相关信息提供了一种有用的方法.例如,当用户访问您的站点时,您可以利用 Cookie 保存用户首选项或其他信息,这样,当用户下次再访问您的站点时,应用程序就可以检索以前保存的信息. 本文概要介绍 Cookie 在 ASP.NET 应用程序中的应用,为您展示在 ASP.NET 中应用 Cookie 的技术细节,例如编写 Cookie.然后再读取它们.同时,还将为您介绍 Cookie 的各种特性和各种特殊情况,以及 A

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

asp.net|cookie|编程 2Cookie 的限制 在开始讨论 Cookie 的技术细节之前,我想先介绍一下 Cookie 应用的几条限制.大多数浏览器支持最多可达 4096 字节的 Cookie,如果要将为数不多的几个值保存到用户计算机上,这一空间已经足够大,但您不能用一个 Cookie 来保存数据集或其他大量数据.在实际应用中,您可能并不希望在 Cookie 中保存大量的用户信息,而只希望保存用户编号或其他标识符.之后,当用户再次访问您的站点时,您就可以使用该用户 ID 在数据库中查

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

asp.net|cookie|编程 读取 Cookie 当浏览器向服务器发送请求时,该服务器的 Cookie 会与请求一起发送.在 ASP.NET 应用程序中,您可以使用 Request 对象来读取 Cookie.Request 对象的结构与 Response 对象的结构基本相同,所以从 Request 对象中读取 Cookie 的方法与向 Response 对象中写入 Cookie 的方法非常类似.以下示例显示了两种方法,目的都是获取名为"username"的 Cookie 的值并将

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

asp.net|cookie|编程 读取 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 -

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

asp.net|cookie|编程 删除 Cookie 删除 Cookie(即把该 Cookie 从用户的硬盘上物理删除)是修改 Cookie 的一种形式.由于 Cookie 位于用户的计算机中,所以您无法直接将其删除.但是,您可以让浏览器为您删除 Cookie.修改 Cookie 的方法前面已经介绍过(即用相同的名称创建一个新的 Cookie),不同的是将其有效期设置为过去的某个日期.当浏览器检查 Cookie 的有效期时,就会删除这个已过期的 Cookie. 所以,删除 Cookie 的方法

揭开ASP.NET中Cookie编程的奥秘

asp.net|cookie|编程 简介 Cookie 为 Web 应用程序保存用户相关信息提供了一种有用的方法.例如,当用户访问您的站点时,您可以利用 Cookie 保存用户首选项或其他信息,这样,当用户下次再访问您的站点时,应用程序就可以检索以前保存的信息. 本文概要介绍 Cookie 在 ASP.NET 应用程序中的应用,为您展示在 ASP.NET 中应用 Cookie 的技术细节,例如编写 Cookie.然后再读取它们.同时,还将为您介绍 Cookie 的各种特性和各种特殊情况,以及 A

ASP.NET中Cookie编程简明参考

asp.net|cookie|编程|参考 一 写入Cookie 1. Name 和 Value 属性由程序设定,默认值都是空引用. 2. Domain属性的默认值为当前URL的域名部分,不管发出这个cookie的页面在哪个目录下的. 例如,http://www.kent.com/application1/login.aspx 页面中发出一个cookie,Domain属性缺省就是www.kent.com ,可以由程序设置此属性为需要的值. 3. Path属性的默认值是根目录,即 "/"

编程中无法回避的基础知识---事务

编程中无法回避的基础知识---事务                   进行软件开发已经有一段时间了,有些东西虽然一直在用但是并不是很理解为什么去用它,它的机制又是什么,是不是还有其他的用途?就像我们在对数据库进行一系列操作时,我们为了保证数据的一致性往往会用到事务.本文将简单的介绍一下事务的相关知识,和简单用法.            基本概念            定义          事务是将一系列 数据源更新分组或分批的方法,以便在回滚事务时同时提交所有事务或者不提交任何事务[MSDN

编程中无法回避的基础知识---委托和事件

编程中无法回避的基础知识---委托和事件          在C#开发中,有时我们需要实现这样的情况:只要新添加一个对象,就要执行一系列的方法.如果每次挨个调用,这样既浪费时间,又造成代码冗余.这个时候我们就可以使用委托来建立一个方法链条,设置好后,可以让一个对象依次去执行这个链条上的各个方法.这样的结果就是:简化了代码,提高了效率,提高了代码的可维护性.        究竟什么是委托呢?事件有何委托有什么关系呢?          一.定义          委托是一个类,它定义了方法的类型,