C#中的cookie编程 及 javascript中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


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:button text = "读取cookie" onclick = "ReadClicked" runat = "server" />
</form >
</body >
</html >


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


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


四、总结:

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

 

 

javascript中cookie 问题

 

  1. <script>
  2. //写cookies函数 作者:翟振凯
  3. function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值
  4. {
  5.     var Days = 30; //此 cookie 将被保存 30 天
  6.     var exp  = new Date();    //new Date("December 31, 9998");
  7.     exp.setTime(exp.getTime() + Days*24*60*60*1000);
  8.     document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
  9. }
  10. function getCookie(name)//取cookies函数        
  11. {
  12.     var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
  13.      if(arr != nullreturn unescape(arr[2]); return null;
  14. }
  15. function delCookie(name)//删除cookie
  16. {
  17.     var exp = new Date();
  18.     exp.setTime(exp.getTime() - 1);
  19.     var cval=getCookie(name);
  20.     if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
  21. }
  22. SetCookie ("xiaoqi""3")
  23. alert(getCookie('xiaoqi'));
  24. </script>

一个非常实用的javascript读写Cookie函数

一个非常实用的javascript读写Cookie函数  

 

  1. function  GetCookieVal(offset)
  2. //获得Cookie解码后的值
  3. {
  4. var  endstr  =  documents.cookie.indexOf  (";",  offset);
  5. if  (endstr  ==  -1)
  6. endstr  =  documents.cookie.length;
  7. return  unescape(documents.cookie.substring(offset,  endstr));
  8. }
  9. function  SetCookie(name,  value)
  10. //设定Cookie值
  11. {
  12. var  expdate  =  new  Date();
  13. var  argv  =  SetCookie.arguments;
  14. var  argc  =  SetCookie.arguments.length;
  15. var  expires  =  (argc  >  2)  ?  argv[2]  :  null;
  16. var  path  =  (argc  >  3)  ?  argv[3]  :  null;
  17. var  domain  =  (argc  >  4)  ?  argv[4]  :  null;
  18. var  secure  =  (argc  >  5)  ?  argv[5]  :  false;
  19. if(expires!=null)  expdate.setTime(expdate.getTime()  +  (  expires  *  1000  ));
  20. documents.cookie  =  name  +  "="  +  escape  (value)  +((expires  ==  null)  ?  ""  :  (";  expires="+  expdate.toGMTString()))
  21. +((path  ==  null)  ?  ""  :  (";  path="  +  path))  +((domain  ==  null)  ?  ""  :  (";  domain="  +  domain))
  22. +((secure  ==  true)  ?  ";  secure"  :  "");
  23. }
  24. function  DelCookie(name)
  25. //删除Cookie
  26. {
  27. var  exp  =  new  Date();
  28. exp.setTime  (exp.getTime()  -  1);
  29. var  cval  =  GetCookie  (name);
  30. documents.cookie  =  name  +  "="  +  cval  +  ";  expires="+  exp.toGMTString();
  31. }
  32. function  GetCookie(name)
  33. //获得Cookie的原始值
  34. {
  35. var  arg  =  name  +  "=";
  36. var  alen  =  arg.length;
  37. var  clen  =  documents.cookie.length;
  38. var  i  =  0;
  39. while  (i  <  clen)
  40. {
  41. var  j  =  i  +  alen;
  42. if  (documents.cookie.substring(i,  j)  ==  arg)
  43. return  GetCookieVal  (j);
  44. i  =  documents.cookie.indexOf("  ",  i)  +  1;
  45. if  (i  ==  0)  break;
  46. }
  47. return  null;
  48. }

 

 

  1. <SCRIPT  language="javascript">
  2. <!--
  3. function  openpopup(){
  4. url="popup.htm"
  5. window.open("gonggao.htm","gonggao","width=260,height=212,left=200,top=0")
  6. }
  7. function  get_cookie(Name)  {
  8. var  search  =  Name  +  "="
  9. var  returnvalue  =  "";
  10. if  (documents.cookie.length  >  0)  {
  11. offset  =  documents.cookie.indexOf(search)
  12. if  (offset  !=  -1)  {
  13. offset  +=  search.length
  14. end  =  documents.cookie.indexOf(";",  offset);
  15. if  (end  ==  -1)
  16. end  =  documents.cookie.length;
  17. returnvalue=unescape(documents.cookie.substring(offset,  end))
  18. }
  19. }
  20. return  returnvalue;
  21. }
  22. function  helpor_net(){
  23. if  (get_cookie('popped')==''){
  24. openpopup()
  25. documents.cookie="popped=yes"
  26. }
  27. }
  28. helpor_net()
  29. //-->
  30. </SCRIPT>

如果点了确定,只要不清cookie,以后访问都不会再提示,如果不点确定则每次都会提示。放在js文件里,全站包含

  1. <SCRIPT LANGUAGE="JavaScript">
  2. <!--
  3. var the_cookie = document.cookie;
  4. var broken_cookie = the_cookie.split(":");
  5. var the_visiteraccepted = unescape(broken_cookie[1]);
  6. //
  7. if (the_visiteraccepted=="undefined"){
  8.         var tmp=confirm('中国人何时何地。');
  9.         if(tmp==false){
  10.                 window.close();
  11.         }else{
  12.                 var the_visiteraccepted = 1;          
  13.         var the_cookie = "ILoveChina=visiteraccepted:" + escape(the_visiteraccepted);                                 
  14.         document.cookie = the_cookie;
  15.         }
  16. }
  17. //-->
  18. </SCRIPT>

1. Cookie的兼容性问题

Cookie的格式有2个不同的版本,第一个版本,我们称为Cookie Version 0,是最初由Netscape公司制定的,也被几乎所有的浏览器支持。而较新的版本,Cookie Version 1,则是根据RFC 2109文档制定的。为了确保兼容性,JAVA规定,前面所提到的涉及Cookie的操作都是针对旧版本的Cookie进行的。而新版本的Cookie目前还不被Javax.servlet.http.Cookie包所支持。

2. Cookie的内容

同样的Cookie的内容的字符限制针对不同的Cookie版本也有不同。在Cookie Version 0中,某些特殊的字符,例如:空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号都不能作为Cookie的内容

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值