zoukankan      html  css  js  c++  java
  • 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   }
     
  • 相关阅读:
    【Leetcode】23. Merge k Sorted Lists
    【Leetcode】109. Convert Sorted List to Binary Search Tree
    【Leetcode】142.Linked List Cycle II
    【Leetcode】143. Reorder List
    【Leetcode】147. Insertion Sort List
    【Leetcode】86. Partition List
    jenkins 配置安全邮件
    python 发送安全邮件
    phpstorm 同步远程服务器代码
    phpUnit 断言
  • 原文地址:https://www.cnblogs.com/annie211/p/10685017.html
Copyright © 2011-2022 走看看