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 属性的默认值是根目录,即 ”/” ,不管发出这个 cookie 的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此 cookie 的作用范围。

4. Expires 属性,这个属性设置此 Cookie 的过期日期和时间。如果没有设置 Cookie 的有效期(默认设置),也可以创建 Cookie ,但它不会保存到用户的硬盘上,而是会成为用户会话信息的一部分,关闭浏览器或会话超时这个 Cookie 即会消失,这种 Cookie 称作非永久性的 Cookie 。存放 SessionID 的 Cookie 就是这样的一种 Cookie ,它不存放在硬盘上,只存在内存之中。

5. 将要发出的 Cookie 附加到 Response 的 Cookies 属性中就可以将此 Cookie 发送到客户端: Reponse.Cookies.Add(Cookie)

6. Domain 属性+ Path 属性 相同的所有 Cookie 在客户端都存在一个文件中, Cookie 之间以 ”*” 分割。每个 Cookie 的第一行是 Cookie 的名称,第二行是值,第三行是 Domain 属性+ Path 属性组成的一个字符串,指示此 Cookie 的作用域,其余各行则包含 Cookie 的日常处理信息,例如过期日期和时间。 Cookie 中还有一个简单的校验和,如果更改 Cookie 名称或值的长度,浏览器就会检测到修改并删除该 Cookie 。

二 读取 Cookie

1. Request.Cookies 属性中包含了客户端发送到服务器的所有 Cookie 的集合,只有在请求 URL 的作用范围内的 Cookie 才会被浏览器连同 Http 请求一起发送到服务器。

2. Name 和 Value 属性和子键的值很容易读到。

3. Domain 和 Path 属性 是读不到的,读 Domain 属性永远是 ”” ,读 Path 属性永远是 ”/” 。本来这些属性的用途很有限。如果您的页面与 Cookie 不在相同的域,您根本就不会在页面的位置接收到该 Cookie 。

4. 也无法读取 Cookie 的过期日期和时间。事实上,当浏览器向服务器发送 Cookie 信息时,浏览器并未将过期信息包括在内。您可以读取 Expires 属性,但总是返回为零的日期 / 时间值。 Expires 属性的主要作用是帮助浏览器执行有关 Cookie 保存的日常管理。从服务器的角度来看, Cookie 要么存在要么不存在,所以对服务器而言,有效期并不是有用的信息。
所以,浏览器在发送 Cookie 时并不提供此信息。如果您需要 Cookie 的过期日期,就必须重新设置。

三 修改和删除 Cookie

1. 其实你不能直接修改一个 Cookie ,是创建一个同名的 Cookie ,并把该 Cookie 发送到浏览器,覆盖客户机上旧的 Cookie 。

2. 同样您无法直接将其删除一个 Cookie ,可以通过修改一个 Cookie 达到让浏览器帮你删除 Cookie 的目的,修改 Cookie 的有效期为过去的某个时间,当浏览器检查 Cookie 的有效期时,就会删除这个已过期的 Cookie 。

四 Cookie 同 Session 的关系

1. asp.net 中 Session 可以采用 cookie 和 cookieless 两种方法, cookieless 方式是将 SessionID 放在 URL 中在客户端和服务端中来回传递,不需要用到 cookie ,在这里不讨论这个方式。

2. 在 asp.net 中客户第一次请求一个 URL ,服务器给这个客户生成一个 SessionID ,并以非永久性的 Cookie 发送到客户端。

3. 非永久性的 Cookie 只有在浏览器关闭后这些 Cookie 才随之消失, Session 的超时判断是这样的过程:

3.1 第一次客户端访问服务器,会得到一个 SessionID ,以非永久性的 Cookie 发送到客户端。

3.2 在这个浏览器关闭之前访问这个 URL ,浏览器都会把这个 SessionID 发送到服务端,服务端根据 SessionID 来维持对应此客户的服务端的各种状态(就是 Session 中保存的各种值),在 web 应用程序中可以对这些 Session 进行操作。

3.3 服务端维护此 SessionID 的过期时间, IIS 中可以设置 Session 的超时时间。每次请求都将导致服务端将此 SessioID 的过期时间延长一个设置的超时时间。

3.4 当服务端发现某个 SessionID 已经过时,即某个客户已经在设置的超时时间内没有再次访问此站点,即将此 SessionID ,连同跟此 SessionID 相关的所有 Session 变量删除。

3.5 客户端的浏览器未关闭前,并不知道服务端已经将这个 SessionID 删除,客户端依旧发送此 SessionID 的 cookie 到服务端,只是此时的服务端已经不认识此 SessionID 了,会将此用户当做新用户,再次分配一个新的 SessionID 。

参考:

ASP.NET 中 Cookie 的基本知识( http://www.microsoft.com/china/msdn/library/dv_vstechart/html/vbtchASPNETCookies101.asp

Published At
Categories with Web编程
Tagged with
comments powered by Disqus