一写入Cookie
Name 和 Value 属性由程序设定默认值都是空引用
Domain属性的默认值为当前URL的域名部分不管发出这个cookie的页面在哪个目录下的
例如http://wwwkentcom/application/loginaspx 页面中发出一个cookieDomain属性缺省就是wwwkentcom 可以由程序设置此属性为需要的值
Path属性的默认值是根目录即 / 不管发出这个cookie的页面在哪个目录下的可以由程序设置为一定的路径来进一步限制此cookie的作用范围
Expires 属性这个属性设置此Cookie 的过期日期和时间如果没有设置 Cookie 的有效期(默认设置)也可以创建 Cookie但它不会保存到用户的硬盘上而是会成为用户会话信息的一部分关闭浏览器或会话超时这个Cookie即会消失这种Cookie称作非永久性的 Cookie存放SessionID的Cookie就是这样的一种Cookie它不存放在硬盘上只存在内存之中
将要发出的Cookie附加到Response的Cookies属性中就可以将此Cookie发送到客户端ReponseCookiesAdd(Cookie)
Domain属性+Path属性 相同的所有Cookie 在客户端都存在一个文件中Cookie之间以*分割每个Cookie的第一行是 Cookie 的名称第二行是值第三行是Domain属性+Path属性组成的一个字符串指示此Cookie的作用域其余各行则包含 Cookie 的日常处理信息例如过期日期和时间Cookie 中还有一个简单的校验和如果更改 Cookie 名称或值的长度浏览器就会检测到修改并删除该 Cookie
二读取Cookie
RequestCookies 属性中包含了客户端发送到服务器的所有Cookie的集合只有在请求URL的作用范围内的Cookie才会被浏览器连同Http请求一起发送到服务器
Name 和 Value 属性和子键的值很容易读到
Domain 和 Path 属性 是读不到的读Domain属性永远是读Path属性永远是 / 本来这些属性的用途很有限如果您的页面与 Cookie 不在相同的域您根本就不会在页面的位置接收到该 Cookie
也无法读取Cookie 的过期日期和时间事实上当浏览器向服务器发送 Cookie 信息时浏览器并未将过期信息包括在内您可以读取 Expires 属性但总是返回为零的日期/时间值Expires 属性的主要作用是帮助浏览器执行有关 Cookie 保存的日常管理从服务器的角度来看Cookie 要么存在要么不存在所以对服务器而言有效期并不是有用的信息
所以浏览器在发送 Cookie 时并不提供此信息如果您需要 Cookie 的过期日期就必须重新设置
三修改和删除 Cookie
其实你不能直接修改一个Cookie是创建一个同名的 Cookie并把该 Cookie 发送到浏览器覆盖客户机上旧的 Cookie
同样您无法直接将其删除一个Cookie可以通过修改一个Cookie达到让浏览器帮你删除Cookie的目的修改Cookie的有效期为过去的某个时间当浏览器检查 Cookie 的有效期时就会删除这个已过期的 Cookie
四Cookie同Session的关系
aspnet中Session可以采用cookie 和cookieless两种方法cookieless方式是将SessionID放在URL中在客户端和服务端中来回传递不需要用到cookie在这里不讨论这个方式
在aspnet中客户第一次请求一个URL服务器给这个客户生成一个SessionID并以非永久性的 Cookie发送到客户端
非永久性的 Cookie只有在浏览器关闭后这些Cookie才随之消失Session的超时判断是这样的过程
第一次客户端访问服务器会得到一个SessionID以非永久性的 Cookie发送到客户端
在这个浏览器关闭之前访问这个URL浏览器都会把这个SessionID发送到服务端服务端根据SessionID来维持对应此客户的服务端的各种状态(就是Session中保存的各种值)在web应用程序中可以对这些Session进行操作
服务端维护此SessionID的过期时间IIS中可以设置Session的超时时间每次请求都将导致服务端将此SessioID的过期时间延长一个设置的超时时间
当服务端发现某个SessionID已经过时即某个客户已经在设置的超时时间内没有再次访问此站点即将此SessionID连同跟此SessionID相关的所有Session变量删除
客户端的浏览器未关闭前并不知道服务端已经将这个SessionID删除客户端依旧发送此SessionID的cookie到服务端只是此时的服务端已经不认识此SessionID了会将此用户当做新用户再次分配一个新的SessionID