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   }
     
  • 相关阅读:
    获取windows所有用户名
    windbg内存查看(d*)
    Windbg查看调用堆栈(k*)
    Windbg调试互斥体(Mutex)死锁
    Windbg调试关键区(CriticalSection)死锁
    "R6002 floating point support not loaded"错误
    由可变参数引起的崩溃
    【Dubbo源码学习】负载均衡算法(2)-轮询算法的实现
    jdk1.8源码解析(1):HashMap源码解析
    Java annotation浅析
  • 原文地址:https://www.cnblogs.com/annie211/p/10685017.html
Copyright © 2011-2022 走看看