将 Cookie 的有效范围限制到域
浏览量:2906
默认情况下,Cookie 与特定的域相关联。例如,如果您的站点是www.gongyelu.cn,那么当用户向该站点请求页面时,您编写的Cookie 就被发送到服务器。(有特定路径值的Cookie 除外,我在上一节刚刚解释过。)如果您的站点有子域(例如gongyelu.cn、sales.gongyelu.cn 和support.gongyelu.cn),就可以把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.gongyelu.cn 和support.gongyelu.cn。
您可能会发现,了解创建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)
上一篇:mysql导入数据