Cookie,他最早出现是在Netscape Navigator 2.0中。Cookie其实就是由Web服务器创建的、将信息存储在机上的文件。那么为什么Web服务器要在客户机上面创建如此文件?这是因为当客户机发送一个请求到WEB服务器时(譬如准备浏览页面时),无论此客户机.
是否是第一次来访,服务器都会把它当作第一次来对待,WEB服务器所做的工作只是简单的进行响应,然后就关闭与该用户的连接。这样处理过程所带来的缺点时显而易见的。自从网景公司开发出Cookie以后,就可以利用 Cookie来保存用户的识别信息。Cookie的作用可以记录了您在该站点上曾经访问过的页面,由此帮助您下次访问该站点时自定义查看。Cookies 也可以存储个人可识别信息。个人可识别信息是可以用来识别或联系您的信息,例如姓名、电子邮件地址、家庭或工作地址,或者电话号码。然而,网站只能访问您提供的个人可识别信息。例如,除非您提供电子邮件名称,否则网站将不能确定您的电子邮件名称。另外,网站不能通过Cookie来访问计算机上的其他信息。当然除非你提供。那么Cookie到底存放在什么地方?如果机器的系统是视窗98且安装在" C" 盘中,那么Cookie存放在" C:WindowsCookies" 目录中;如果机器系统是视窗2000且安装在" C" 盘中,那么Cookie存放在" C:Documents and SettingsAdministratorCookies" 目录中。了解了Cookie这么多知识,我们还是来了解一下本文的重点-- C#是如何进行Cookie方面编程的。主要内容有二点:其一是 C#是如何写入Cookie;其二是 C#是如何访问自己写入的Cookie。
一、本文介绍的程序设计和运行的软件环境:
微软公司视窗2000服务器版
.Net FrameWork SDK Beta 2
C#进行Cookie方面编程是通过ASP.NET页面来实现的。
二、C#如何写入Cookie:
为了写入Cookie,他的步骤主要有三步,具体如下:
首先就要创建一个HttpCookie对象,通过这个对象来构造一个Cookie,这个对象的名称就是以后产生的Cookie名称。具体如下代码:
HttpCookie cookie = new HttpCookie ( " 用户定义的Cookie名称" ) ;
然后对创建的HttpCookie对象的" Value" 属性分配一个字符串值," Value" 的值就是后来产生的Cookie的值。具体代码如下:
cookie.Value = "用户给Cookie赋值" ; 如果你想写入的Cookie数值不是一个简单的字符串,而是一个复杂的数据类型,我们知道这些数据类型是不能直接存贮到Cookie中的,因为 Cookie中只能存贮字符串。但你可以通过一个变通的方法,就是把这个复杂的数据类型转换成多个字符串,然后把这多个字符串同时赋值给产生的 Cookie值,这样Cookie中的内容就丰富了,以后利用Cookie完成的功能也强大了。这时你可能就会明白为什么当你浏览Web服务器,Web服务器会知道你什么时候曾经浏览过,并且曾经待过多长时间等信息了。因为这些信息已经存储到你第一次浏览页面时,Web服务器产生的Cookie中去了。下列代码是把多个字符串存储到Cookie的例子:
cookie [ " 姓名" ] = " 王天";
cookie [ " 性别" ] = " 男";
cookie [ " 年龄" ] = " 26";
Cookie有临时的,也有永远的。永久 Cookie 以文件形式存储在计算机上,关闭 Internet Explorer 时仍然保留在计算机上。再次访问该站点时,创建该 Cookie 的网站可以读取。在具体的编程时候,是在写入此Cookie的时候,设定Cookie的生命周期,具体如下代码:
DateTime dtmNow = new DateTime();
dtmNow = DateTime.Now;
TimeSpan tmspMinute = new TimeSpan(0, 0, 30, 0, 0);
以上代码是设定产生的Cookie的生命期为" 30分钟" ,你可以通过修改" TimeSpan" 属性来设定产生Cookie的具体生命期。
.最后调用" Response.Cookies" 对象的" Add()" 方法,加入此对象,这样就可以产生一个Cookie了。具体代码如下:
Response . Cookies . Add ( cookie ) ;
下列代码就是在 C#写入Cookie的完整代码(Write.aspx):<% @ language = "C#" %>
在 C#页面中创建cookie
此cookie的生命周期定义为一个小时
下图是上面代码运行后的界面:
图01:C#写入Cookie的程序运行界面
当然上面的代码产生的Cookie在内容上面有点单调了。其实对于内容十分丰富的Cookie来说,他还有许多属性,充分的利用这些属性,才可以利用了Cookie的强大功能。下表是Cookie的一些常用的属性:
属性 描述
Domain 设定/获得Cookie应属于的域名。一旦设定了此属性,则只限定于此域名的Web服务器访问此Cookie。可以设定为"ccw.com.cn"
Path 设定/获得Cookie应属于的路径,如果设定后,则访问此Cookie的Web页面则被限定在此路径里面。其他路径的Web页面则不能访问。
Secure 设定/获得一个标识来表明利用HTTP协议是否能够安全的传输Cookie到客户端的浏览器。
HasKeys 表明是否此Cookie是否是多个字符串组成的。
在写入Cookie的时候,最大限度的利用这些属性,对于最大程度的利用写入的Cookie是十分重要的。
三、C#是如何读取已产生的Cookie:
读取指定的Cookie比起写入Cookie要来的容易的多了,只需要使用" Request.Cookies" 对象就可以完成。下面是读取指定Cookie名称的方法:
HttpCookie cookie = Request.Cookies [ " Cookie的名称" ] ;
下面是显示已经读取了的Cookie的数值:
Response.Write (cookie . Value . ToString ( ) ) ; 掌握了上面的要点,读取Cookie就显得非常容易了,下列是读取Cookie的程序代码(read.aspx): <% @ language = "C#" %>
在 C#页面中读取指定Cookie值
4.修改和删除 Cookie
修改Cookie
不能直接修改 Cookie。
更改 Cookie 的过程涉及创建一个具有新值的新 Cookie,
然后将其发送到浏览器来覆盖客户端上的旧版本 Cookie。
删除Cookie
删除 Cookie(即从用户的硬盘中物理移除 Cookie)是修改 Cookie 的一种形式。
由于 Cookie 在用户的计算机中,因此无法将其直接移除。
但是,可以让浏览器来为您删除 Cookie。
该技术是创建一个与要删除的 Cookie 同名的新 Cookie,
并将该 Cookie 的到期日期设置为早于当前日期的某个日期。
当浏览器检查 Cookie 的到期日期时,浏览器便会丢弃这个现已过期的 Cookie。
下面的代码示例演示删除应用程序中所有可用 Cookie 的一种方法:
复制C#代码保存代码
HttpCookie aCookie;
string cookieName;
int limit = Request.Cookies.Count;
for (int i = 0; i < limit; i++)
{
cookieName = Request.Cookies[i].Name;
aCookie = new HttpCookie(cookieName);
aCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(aCookie);
}