cookie

一、什么是cookie

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

要跟踪该会话,必须引入一种机制。

Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。

二、cookie的使用

JS读取cookie:

假设cookie中存储的内容为:name=jack;password=123

则在B页面中获取变量username的值的JS代码如下:

var username=document.cookie.split(";")[0].split("=")[1];

  

 1 //设置cookie
 2 function setCookie(name,value)
 3 {
 4 var Days = 30;
 5 var exp = new Date();
 6 exp.setTime(exp.getTime() + Days*24*60*60*1000);
 7 document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
 8 }
 9 
10 //获取cookie
11 function getCookie(name)
12 {
13 var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
14 if(arr=document.cookie.match(reg))
15 return unescape(arr[2]);
16 else
17 return null;
18 }
19 //删除cookies
20 function delCookie(name)
21 {
22 var exp = new Date();
23 exp.setTime(exp.getTime() - 1);
24 var cval=getCookie(name);
25 if(cval!=null)
26 document.cookie= name + "="+cval+";expires="+exp.toGMTString();
27 }
28 //使用示例
29 setCookie("name","hayden");
30 alert(getCookie("name"));
31 //如果需要设定自定义过期时间
32 //那么把上面的setCookie 函数换成下面两个函数就ok;
33 //程序代码
34 function setCookie(name,value,time)
35 {
36 var strsec = getsec(time);
37 var exp = new Date();
38 exp.setTime(exp.getTime() + strsec*1);
39 document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
40 }
41 function getsec(str)
42 {
43 alert(str);
44 var str1=str.substring(1,str.length)*1;
45 var str2=str.substring(0,1);
46 if (str2=="s")
47 {
48 return str1*1000;
49 }
50 else if (str2=="h")
51 {
52 return str1*60*60*1000;
53 }
54 else if (str2=="d")
55 {
56 return str1*24*60*60*1000;
57 }
58 }
59 //这是有设定过期时间的使用示例:
60 //s20是代表20秒
61 //h是指小时,如12小时则是:h12
62 //d是天数,30天则:d30
63 setCookie("name","hayden","s20");

三、缺点

1.数据大小:4kb,只能存储一些简单的字段

2.安全性:在http中cookie是明文传输,有比较大的安全性

3.网络负担:cookie会被附加在每一个http请求中,增加不必要的流量损失。

四、cookie跨域

cookie具有两个重要属性:
1、domain-域
通过设置这个属性可以使多个web服务器共享cookie。domain属性的默认值是创建cookie的服务器的主机名。不能将一个cookie的域设置成服务器所在的域之外的域。

举个例子:

让位于a.taotao.com的服务器能够读取b.taotao.com设置的cookie值。如果b.taotao.com的页面创建的cookie把 它的path属性设置为”/”,把domain属性设置成”.taotao.com”,那么所有位于b.taotao.com的网页和所有位于 a.taotao.com的网页,以及位于taotao.com域的其他服务器上的网页都可以访问(或者说是得到)这个cookie。

2、path-路径
表示创建该cookie的服务器的哪些路径下的文件有权限读取该 cookie,默认为/,就是创建该cookie的服务器的根目录。

js设置跨域:

 1 function setCookie_log (c_name,value,domain){
 2     var exdate = new Date(), expiredays = 365;
 3     exdate.setDate(exdate.getDate() + expiredays);
 4     //判断是否需要跨域存储
 5     if (domain) {
 6         document.cookie = c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString())+";path=/;domain=xueersi.com";
 7     } else {
 8         document.cookie = c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString())+";path=/";
 9     }   
10   }
 
原文地址:https://www.cnblogs.com/annie211/p/10685017.html