今天Felix看了篇文章(看的也是转载的,没有注明原文地址...),觉得很不错,讲解了Cookie的基本用法,比较实用哦。不过文章没有提到cookie的删除,在ASP.NET下删除cookie需要注意,在设置完cookie有效期之后,添加System.Web.HttpContext.Current.Response.Cookies.Set(cook);其中cook为你的cookie对象名,这点比较很重要。
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
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"; DateTime dtNow = DateTime . Now ;TimeSpan tsMinute = new TimeSpan ( 0 , 1 , 0 , 0 ) ;cookie . Expires = dtNow + tsMinute ; - .最后调用" 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" ;//加入此cookieResponse . 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 >
下图是上面代码运行后的界面:
当然上面的代码产生的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 ;//获得cookieHttpCookie cookie = Request.Cookies [ strCookieName ] ;//确定是否存在用户输入的cookieif ( 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 > |
下图是上面代码运行后的界面:
Felix的总结:在新建cookie对象的时候,我们是在服务器端通过response来添加cookie对象的;在客户端通过request对象读取cookie的值。道理越辩越明,Felix希望更多关于cookie的问题能够被提出来讨论。