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

一、本文介绍C# Cookie编程的程序设计和运行的软件环境

微软公司视窗000服务器版

.Net FrameWork SDK Beta

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 [ " 姓名" ] = " xs";  
cookie [ " 性别" ] = " 男";  
cookie [ " 年龄" ] = " 6";

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了。具体代码如下:

protected void WriteClicked(object sender, EventArgs e) { //创建一个HttpCookie对象 HttpCookie cookie = new HttpCookie(NameField.Text); //设定此cookies值 cookie.Value = ValueField.Text; //设定cookie的生命周期,在这里定义为一个小时 TimeSpan tsMinute = new TimeSpan(0, 1, 0, 0); cookie.Expires = DateTime.Now + tsMinute; cookie["姓名"] = this.txtUserName.Text; cookie["密码"] =this.txtPassword.Text; cookie["Email"] = txtEmail.Text; //加入此cookie Response.Cookies.Add(cookie); Response.Write("<b><span style="color:red;" mce_style="color:red;">" + NameField.Text + "</span></b>Cookie创建完毕! <br> <hr> "); } protected void ReadClicked(object sender, EventArgs e) { //得到用户输入的cookie名称 String strCookieName = NameField2.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("<b><span style="color:red;" mce_style="color:red;">" + strCookieName + "</span></b>cookie 的值为: <b> " + strCookieValue + " </b> <br> <hr> "); } }

当然上面的代码产生的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):

<body> <form id="form1" runat="server"> <div><h3> 1.在 C#面中创建cookie </h3>此cookie的生命周期定义为一个小时 </br> <table> <tr> <td >Cookie名称:</td> <td> <asp:textbox id = "NameField" runat = "server" /> <br> </td> </tr> <tr> <td >用户名:</td> <td><asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> </td> </tr> <tr> <td>密码:</td> <td> <asp:TextBox ID="txtPassword" runat="server"TextMode="Password"></asp:TextBox> </td> </tr> <tr> <td>Email:</td> <td> <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox></td> </tr> </table> <asp:button ID="Button1" text = "创建Cookie" onclick = "WriteClicked" runat = "server" /> <br> <hr /> <h3>2.在 C#面中读取指定Cookie值 </h3>请输入要读取的Cookie名称:<br /> <asp:textbox id = "NameField2" runat = "server" /> <asp:button ID="Button2" text = "读取cookie" onclick = "ReadClicked" runat = "server" /> </div> </form> </body>

效果图如下:

四、总结

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

Cookie编程入门篇相关推荐

  1. MAYA API插件编程--入门篇

    MAYA API插件编程--入门篇 作者:华文广          日期:2010.11.28 我们知道,MAYA是一个基于结点的插件式软件架构,这种开放式的软件架构是非常优秀的,它可以让用户非常方便 ...

  2. python机器人视觉编程——入门篇(下)

    目录 1 全篇概要 2 图像的读取与运算基础 2.1图像的读取 2.1.1 从磁盘的图像(.jpg,.npg,.gif等等)读取 2.1.2 从摄像头里读取图像 2.2图像的运算 2.2.1 图像的数 ...

  3. ​​Python少儿编程入门篇(2)算术运算和赋值运算

    Python少儿编程小课堂(二) 入门篇(2)算术运算和赋值运算 标识符 就是一个名字,就好像我们每个人都有自己的名字一样,主要作用就给变量.函数.类.模块以及其他对象起名字. 命名规则 1. 标识符 ...

  4. Python少儿编程入门篇(3)比较运算和逻辑运算

    Python少儿编程小课堂(三) 入门篇(3)比较运算和逻辑运算 运算符(2) 上一节课讲了算术运算符和赋值运算符,本节继续讲其它运算符: 比较运算符 ==.!=.>.<.>= .& ...

  5. 编程入门篇之零基础入门(通用)

    为什么写这一篇? 编程一途,最难的莫过于入门.如果你想学,那么现在就开始,编程远没有想象中那么复杂. 从变量说起 2x + 1 = y 这是一个数学中的二元一次方程,其中x和y就是变量,在编程中的变量 ...

  6. python机器人视觉编程——入门篇(上)

    目录 1 全篇概要(主要阅读对象及内容提要) 2 python知识点之--环境及依赖的库安装简述 2.1 Python开发环境安装 2.2 Python 机器视觉模块安装 2.3 写第一个Python ...

  7. Python异步编程入门篇

    本人很懒,不想详细些过程,后续会更新代码也许,具体文章推荐链接 ---------深入理解Python异步编程-----–

  8. 【手把手带你刷题】-C语言编程入门篇(一)

    大家好,我是深鱼~ 目录 前言: 在线OJ <1>什么是在线OJ <2>为啥训练在线OJ 1.实践出真知 2.我是大V 3.有容乃大 4.缩短二进制 5.反向输出一个四位数 6 ...

  9. JavaScript 函数式编程——入门指南

    JavaScript 函数式编程 一.什么是函数式编程 **定义:**函数式编程是一种编程范式,将整个程序都由函数调用以及函数组合构成. 可以看成一条流水线,数据可以不断地从一个函数的输出流入另一个函 ...

最新文章

  1. K近邻算法:以同类相吸解决分类问题!
  2. Kosaraju算法、Tarjan算法分析及证明--强连通分量的线性算法
  3. DNS服务器全面解析--转
  4. ChainBuilder Connect SOA平台解决方案的案例研究
  5. c++ error函数_R语言中广义线性模型(GLM)中的分布和连接函数分析
  6. MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established
  7. USB peripherals can turn against their users
  8. Linux基础命令---mpstat显示CPU使用情况
  9. 你越努力,越没有领导潜力
  10. Rhino学习教程——1.5
  11. 查询没有走索引_MySQL 如何正确的使用索引
  12. python 解析html 模块_使用 Python 模块—— HTMLParser 解析 HTML 文档元素
  13. 知道焊缝长度如何确定节点板尺寸_悦和分享:最全的关于焊缝无损检测的知识点...
  14. CentOS 6.5安装Tomcat-9.0.0.M19
  15. 2010.6.20 OA项目组一周工作报告
  16. 无限弹窗(bat代码 整人恶作剧)
  17. Android锁屏的实现与难点总结
  18. iOS转向Flutter学习日记
  19. C++ 类型A支持强制转换类型B的写法
  20. MySQL基础(一)---数据库的诱惑

热门文章

  1. UVALive5379 UVA270 Lining Up
  2. 下一代超大规模软件定义网络技术实践
  3. Java集合框架中Map接口的使用
  4. 9月22日我国垃圾邮件报告:湖北省再居榜首
  5. KDE发布四月份更新(4.6.2),与GNOME同祝
  6. 浅谈ARP病毒的清除与预防
  7. COGNOS8培训之四(疑点解析)
  8. 再学 GDI+[33]: TGPPen - 画笔的几何变换 - SetTransform
  9. Canvas VS . SVG
  10. 【编程题目】编程判断俩个链表是否相交 ☆