asp.net

cookie介绍

2010-10-01

Cookie就是所谓的 "   小甜饼 "   ,他最早出现是在Netscape   Navigator   2.0中。Cookie其实就是由Web服务器创建的、将信息存储在计算机上的文件。那么为什么Web服务器要在客户机上面创建如此文件?这是因为当客户机发送一个请求到WEB服务器时(譬如准备浏览页面时),无论此客户机是否是第一次来访,服务器都会把它当作第一次来对待,WEB服务器所做的工作只是简单的进行响应,然后就关闭与该用户的连接。这样处理过程所带来的缺点时显而易见的。自从网景公司开发出Cookie以后,就可以利用Cookie来保存用户的识别信息。Cookie的作用可以记录了您在该站点上曾经访问过的页面,由此帮助您下次访问该站点时自定义查看。Cookies   也可以存储个人可识别信息。个人可识别信息是可以用来识别或联系您的信息,例如姓名、电子邮件地址、家庭或工作地址,或者电话号码。然而,网站只能访问您提供的个人可识别信息。例如,除非您提供电子邮件名称,否则网站将不能确定您的电子邮件名称。另外,网站不能通过Cookie来访问计算机上的其他信息。当然除非你提供。那么Cookie到底存放在什么地方?如果机器的系统是视窗98且安装在 "   C "   盘中,那么Cookie存放在 "   C:\Windows\Cookies "   目录中;如果机器系统是视窗2000且安装在 "   C "   盘中,那么Cookie存放在 "   C:\Documents   and   Settings\Administrator\Cookies "   目录中。了解了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   dtNow   =   DateTime   .   Now   ;
TimeSpan   tsMinute   =   new   TimeSpan   (   0   ,   1   ,   0   ,   0   )   ;
cookie   .   Expires   =   dtNow   +   tsMinute   ;

以上代码是设定产生的Cookie的生命期为 "   一个小时 "   ,你可以通过修改 "   TimeSpan "   属性来设定产生Cookie的具体生命期。  
.最后调用 "   Response.Cookies "   对象的 "   Add() "   方法,加入此对象,这样就可以产生一个Cookie了。具体代码如下:
Response   .   Cookies   .   Add   (   cookie   )   ;
下列代码就是在   C#写入Cookie的完整代码(Write.aspx):
<%   @   language   =   "C# "   %>
<script   runat   =   "server "   >
void   WriteClicked   (   Object   Sender   ,   EventArgs   e   )
{
//创建一个HttpCookie对象
HttpCookie   cookie   =   new   HttpCookie   (   NameField   .   Text   )   ;
//设定此cookies值
cookie   .   Value   =   ValueField   .   Text   ;
//设定cookie的生命周期,在这里定义为一个小时
DateTime   dtNow   =   DateTime   .   Now   ;
TimeSpan   tsMinute   =   new   TimeSpan   (   0   ,   1   ,   0   ,   0   )   ;
cookie   .   Expires   =   dtNow   +   tsMinute   ;
cookie   [   "姓名 "   ]   =   "王天 "   ;
cookie   [   "性别 "   ]   =   "男 "   ;
cookie   [   "年龄 "   ]   =   "26 "   ;
//加入此cookie
Response   .   Cookies   .   Add   (   cookie   )   ;
Response   .   Write   (   NameField   .   Text   +   "Cookie创建完毕   <br   >   <hr   >   "   )   ;
}
</script   >
<html   >
<body   >  
<h3   >   在   C#页面中创建cookie   </h3   >
此cookie的生命周期定义为一个小时
<form   runat= "server ">
Cookie名称: <asp:textbox   id   =   "NameField "   runat   =   "server "   />   <br   >
Cookie的值: <asp:textbox   id   =   "ValueField "   runat   =   "server "   />   <br   >
<asp:button   text   =   "创建Cookie "   onclick   =   "WriteClicked "   runat   =   "server "   />   <br   >
</form   >
</body   >
</html   >  

下图是上面代码运行后的界面:  

图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# "   %>
<script   runat   =   "server "   >
void   ReadClicked   (   Object   Sender   ,   EventArgs   e   )
{
//得到用户输入的cookie名称
String   strCookieName   =   NameField   .   Text   ;
//获得cookie
HttpCookie   cookie   =   Request.Cookies   [   strCookieName   ]   ;
//确定是否存在用户输入的cookie
if   (   null   ==   cookie   )   {
Response.Write   (   "没有发现指定的cookie   <br   >   <hr   >   "   )   ;
}
else   {
//找到指定的cookie,显示cookie的值
String   strCookieValue   =   cookie   .   Value   .   ToString   (   )   ;
Response.Write   (   strCookieName   +   "   cookie   的值为:   <b   >   "  
+   strCookieValue   +   "   </b   >   <br   >   <hr   >   "   )   ;
}
}
</script   >
<html   >
<body   >
在   C#页面中读取指定Cookie值 <br   >
<form   runat   =   "server "   >
请输入要读取的Cookie名称: <asp:textbox   id   =   "NameField "   runat   =   "server "   />
<asp:button   text   =   "读取cookie "   onclick   =   "ReadClicked "   runat   =   "server "   />
</form   >
</body   >
</html   >  

下图是上面代码运行后的界面:  

图02:读取指定Cookie的值的程序运行界面

四、总结:  

至此我们已经介绍了用   C#进行Cookie编程的大部分内容。其实Cookie在互联网上有着比较大的作用。譬如它可让WEB站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径等;还可告诉在线广告商广告被点击的次数,从而可以更精确的投放广告;它可让用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点;最为重要的是它可帮助站点统计用户资料以实现个性化服务等等。掌握了   C#的Cookie编程,就可以在程序中充分利用Cookie来实现上面的这些功能了。不信你试一试。