Web如何使用cookie,MVC如何使用cookie

Cookie是在Web上用于存储客户系统信息的对象。所有的信息都以每行一个Cookie的形式存放在客户端的一个名为cookies.txt的文件里。

Cookie在HTTP头标(客户和服务器用来标识自身的分组)中在客户机与服务器之间传输。Cookie由某个WWW网页在某客户机上进行设置。

比如,某个WWW网页已在一个用户的计算机上设置了一个Cookie,其中存储的信息是该用户的身份号(随机赋予该用户的唯一标识),

当该用户的浏览器连接该WWW站点时,站点要求浏览器将Cookie送回,他的身份号就通过Cookie 传递给该网页所在的WWW服务器。

服务器上的一个CGI程序查找一个服务器端的文件以确定关于他的预设内容。当某个服务器在客户的计算机上设置Cookie后,

请注意如果要让Cookie信息确实写入文件,必须关闭浏览器。在浏览器未关闭之前,任何新的或变化的Cookie都存放在内存中。


二、Cookie的特性
 每个Cookie包含有6个元素,常用的有:name、value、expires、domain和secure。这些元素存放了这个Cookie的作用范围及实际的数据。

1.name 这是每一个Cookie必须有的元素,它是该Cookie的名字。name元素是一个不含分号、逗号和空格的字符串。其命名方式与变量命名相同。

2.value  value也是每个Cookie必须有的元素,它是该Cookie的值。value元素是实际存放于Cookie中的信息。它是由任何字符构成的字符串。

3.expires  expires是一个Cookie的过期时间。没有设置expires元素的Cookie在用户断开连接后过期,但在用户关闭浏览器之前Cookie依然存在。

Cookie有一个过期时间并等于它会从Cookie.txt文件中被删除。在它的位置被用来存放另一个Cookie前,它依然存在着。

过期的Cookie只是不被送往要求使用它的服务器。expire是一个串,它的形式如下:Wdy, DD-Mon-YY HH:MM:SS GMTexpires元素是可选的。

4.domain  domain是设置某个Cookie的Web网页所在的计算机的域名。这样,由一个站点创建的Cookie不会影响到另一个站点上的程序。

对于较高层的域名如.com, .edu,或.mil,域名中至少有两个分隔符(.)。而对于较低层的域名如.cn, .uk或.ca,域名中至少有3个分隔符。

demain元素自动地被设为网页所在站点的基本域名。

比如,你的网页位于http://www.dscga.com/~user,则该网页创建的Cookie缺省地对域dscga.com有效。如果你希望你的Cookie 只应用于服务器www3.dscya.com,那么你必须在设置Cookie的时候指定。

只有拥有域名的站点才能为那个域名设置Cookie

5.path  一个Cookie可以被指定为只针对一个站点的某一层次。如果一个Web站点要区分已注册的和未注册的客户,就可以为已经注册的客户设置Cookie,

当注册过的客户访问该站点时,他就可以访问到只对注册客户有效的页面。path是可选项,如果没有指定path,将被缺省地设置为设置Cookie的页面的路径。

6.secure标志  secure是一个布尔值(真或假)。它的缺省值为假。如果它被设为真值, 这个Cookie只被浏览器认为是安全的服务器所记住。 


三、关于Cookie的一些限制 
一个站点能为一个单独的客户最多设置20个Cookie。如果一个站点有两个服务器(如ww 
w.dscga.comwww3.dscga.com)但没有指定域名,Cookie的域名缺省地是dscga.com

如果指定了确切的服务器地址,则每个站点可以设置20个Cookie--而不是总共20个。不仅每个服务器能设置的Cookie数目是有限的,而且每个客户机最多只能存储300个Cookie。

如果一个客户机已有300个Cookie,并且一个站点在它上面又设置了一个新Cookie,那么,先前存在的某一个Cookie将被删除。

每个Cookie也有自身的限制。Cookie不得超过4KB(4096bytes),其中包括名字和其他信息。

四、javascript和Cookie 
现在大家已经了解有关Cookie的一些基本概念了,让我们更进一步讨论Cookie。可以用javascript来很方便地编写函数用来创建、读取和删除Cookie。下面,我们就介绍这些函数 

Web如何使用cookie
1.创建Cookie 
我们要进行的第一件事就是要创建一个Cookie。下面给出的SctCookie()函数将完成这一功能。
 function SetCookit (name, value) {
   var argv=SetCookie.arguments;
   var argc=SetCookie.arguments.length;
   var expires=(argc>2)?argv[2]: null;
   var path=(argc>3)? argv[3]: null;
   var domain=(argc>4)? argv[4]: null;
   var secure=(argc>5)? argv[5]: false;
   documents.cookie=name+"="+escape
     (value)+
   ((expires==null)?"":(";expires="
     +expires.toGMTString()))+
   ((path==null)?"":(";path="+path))+
   ((domain==null)?"":(";domain="+
     domain))+
   ((secure==true)?";secure":"");
 }
 SetCookie()只要求传递被设置的Cookie的名字和值,但如果必要的话你可以设置其他4 个参数而不必改变这个函数。

可选的参数必须用正确的次序使用。如果不想设置某个参数, 必须设置一个空串。比如,如果我们创建的一个Cookie需要指定secure域,

但不想设置expires, patb或domain,就可以像这样调用SetCokie():  SetCookie("MyNewCookie","Myvalue" ,"",","tyue);

2.读取Cookie 
下面给出的函数GetCookie()用来读取一个Cookie。当一个Cookie的请求被客户机收到时,该客户机查找它的cookies.txt文件以进行匹配。

这个函数首先匹配这个Cookie的名字。如果有多个同名的Cookie,它再匹配路径。函数完成匹配后返回这个Cookie的值。如果客户机中没有这个Cookie,

或者路径不匹配,该函数返回一个NULL。
 function GetCookie(name) {
   var arg=name+ "=";
   var alen=arg.length;
   var clen=documents.cookie.length;
   var i=0;
   while (i<clen) {
     var j=i+alen;
     if(documents.cookie.substring(i,j)
     ==arg)
     return getCookieVal(j);
     i=documents.cookie.indexOf("",i)+1;
     if(i==0)break;
   }
   return null;
 }
函数中使用了getCookieVal()函数,它是GetCookie()函数的补充。getCookieVal()将C ookies.txt文件分解为片断,并从一批Cookie中读出正确的Cookie。该函数的实现如下:
 function getCookieVal(offset) {
   var endstr=documents.cookie.indexOf
     (";",offset);
   if(endstr==-1) //没有指定其他元素
     endstr=documents.cookie.length;
   return unescape(documents.cookie.substring
     (offset,endstr));
 }


3.删除Cookie 
删除一个Cookie很简单,只需将它的过期时间设为NULL。当用户断开连接后,这个Cooki e就过期了(没有过期时间的Cookie将在浏览器关闭时被删除)。下面的函数DeleteCookie() 说明了如何删除一个
Cookie:
 function DeleteCookie(name) {
   var exp=new Date();
   exp.setTime(exp.getTime()-1);
   //将exp设为已过期的时间
   var cval=GetCookie(name);
   documents.cookie=name+"="+cval+";
   expires="+exp.toGMTString();
 }

MVC如何使用cookie

 

1、创建Cookies有两种方法:

Response.Cookies["userName"].Value = "patrick";
Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1);
HttpCookie aCookie = new HttpCookie("lastVisit");
aCookie.Value = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);

2、读取Cookie

复制代码
if(Request.Cookies["userName"] != null)
    Label1.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);

if(Request.Cookies["userName"] != null)
{
    HttpCookie aCookie = Request.Cookies["userName"];
    Label1.Text = Server.HtmlEncode(aCookie.Value);
}
复制代码

3、修改和删除Cookie

复制代码
int counter;
if (Request.Cookies["counter"] == null)
    counter = 0;
else
{
    counter = int.Parse(Request.Cookies["counter"].Value);
}
counter++;

Response.Cookies["counter"].Value = counter.ToString();
Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1);
复制代码

一定要注意设置Cookies是用Response读取是用Request两者不一样!

删除Cookie

string subkeyName;
subkeyName = "userName";
HttpCookie aCookie = Request.Cookies["userInfo"];
aCookie.Values.Remove(subkeyName);
aCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);

 

复制代码
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);
}
posted @ 2014-11-25 11:07  denglj03  阅读(1852)  评论(0编辑  收藏  举报