zoukankan      html  css  js  c++  java
  • JS之document.cookie详解以及$.cookie的使用

    什么是cookie?

    cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。

    设置cookie

    每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:

    document.cookie="userId=828";

    document.cookie看上去就像一个属性,可以赋不同的值。但它和一般的属性不一样,改变它的赋值并不意味着丢失原来的值,例如连续执行下面两条语句:

    document.cookie="userId=828";
    document.cookie="userName=hulk"; 

    这时浏览器将维护两个cookie,分别是userId和userName,因此给document.cookie赋值更像执行类似这样的语句:

    document.addCookie("userId=828");
    document.addCookie("userName=hulk");

    事实上,浏览器就是按照这样的方式来设置cookie的,如果要改变一个cookie的值,只需重新赋值,例如:

    document.cookie="userId=929";

    这样就将名为userId的cookie值设置为了929。

    获取cookie的值

    下面介绍如何获取cookie的值。cookie的值可以由document.cookie直接获得:

    var strCookie=document.cookie; 

    这将获得以分号隔开的多个名/值对所组成的字符串,这些名/值对包括了该域名下的所有cookie。例如:

    document.cookie="userId=828";
    document.cookie="userName=hulk";
    var strCookie=document.cookie;
    console.log(strCookie); //userId=828; userName=hulk

    当然这个要在环境下运行,因为是获取当前域名下的cookie。

    由此可见,只能够一次获取所有的cookie值,而不能指定cookie名称来获得指定的值,这正是处理cookie值最麻烦的一部分。

    用户必须自己分析这个字符串,来获取指定的cookie值,例如,要获取userId的值,可以这样实现:

    document.cookie="userId=828";
    document.cookie="userName=hulk";
    var strCookie=document.cookie;
    console.log(strCookie); //userId=828; userName=hulk
    
    
    function getdescookie(strcookie,matchcookie){
        var getMatchCookie;
        var arrCookie=strcookie.split(";");
        for(var i=0;i<arrCookie.length;i++){
             var arr=arrCookie[i].split("=");
             if(matchcookie == arr[0]){
                    getMatchCookie = arr[1];
                    break;
             }
        }
        return getMatchCookie;
    }
    
    var resultCookie = getdescookie(strCookie,'userId');
    console.log(resultCookie); //828

    这样就得到了单个cookie的值

    如果在某个页面创建了一个cookie,那么该页面所在目录中的其他页面也可以访问该cookie。如果这个目录下还有子目录,则在子目录中也可以访问。

    为了控制cookie可以访问的目录,需要使用path参数设置cookie,语法如下:

    document.cookie="name=value; path=cookieDir";

    其中cookieDir表示可访问cookie的目录。

    例如:

    document.cookie="userId=320; path=/shop";

    就表示当前cookie仅能在shop目录下使用。
    如果要使cookie在整个网站下可用,可以将cookie_dir指定为根目录,例如:

    document.cookie="userId=320; path=/";

    常用的cookie操作及其函数实现

    addCookie

    addCookie(name,value,expireHours) 该函数接收3个参数:cookie名称,cookie值,以及在多少小时后过期。说明下,这个expireHours当然也可以设置成天或者秒等,只是在函数内部的处理稍微变一下而已:

    function addCookie(name,value,expireHours){
         var exdate = new Date();    
        exdate.setTime(exdate.getTime() + expireHours * 60 * 60 * 1000);    
      document.cookie = c_name + "=" + escape(value) + ((expireHours == null) ? "" : ";expires=" + exdate.toUTCString());
    }

    getCookie

    获取指定名称的cookie值:getCookie(name)。该函数返回名称为name的cookie值,如果不存在则返回空。我们先来看下得到当前cookie的代码:

    document.cookie="userId=828";
    document.cookie="userName=hulk";
    console.log(document.cookie); //userId=828; userName=hulk

    看到得到的cookie列表了吧,两个cookie之间用;隔开后面还有空格,所以用正则匹配获取当前指定的某个cookie名称的值,实现如下:

    function getCookie(name){
     var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
        if (arr = document.cookie.match(reg)){
            return (arr[2]);
        }else{
             return null;
        }      
    }

    上面arr匹配得到的数组结果为:

    [" userName=hulk", " ", "hulk", "", index: 11, input: "userId=828; userName=hulk"]

    如果全局匹配:

    reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)",'g');

    那么得到的arr数组为:

    [" userName=hulk"]

    或者不用正则匹配,如下面代码:

    function getCookie(name){
         var strCookie=document.cookie;
         var arrCookie=strCookie.split(";");
         for(var i=0;i<arrCookie.length;i++){
               var arr=arrCookie[i].split("=");
               if(arr[0]==name){
                    return arr[1];
               }
         }
         return null;
    }

    deleteCookie

    删除指定名称的cookie:deleteCookie(name)该函数可以删除指定名称的cookie,其实现如下:

    function deleteCookie(name){
        var exp = new Date();
        exp.setTime(exp.getTime() - 1);
        document.cookie = name + "=v;expires=" + exp.toUTCString();
    }

    说明下:这儿我用的toUTCString()方法,看了网上有的用的toGMTString()在格式化时间,但不赞成使用此方法。请使用 toUTCString() 取而代之!!,在W3C中看到这句话。

     jQuery cookie的使用

    首先引入jquery与jquery.cookie

    <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>  
    <script type="text/javascript" src="js/jquery.cookie.js"></script>   

    使用如下:

    //新增cookie:  
    $.cookie('cookieName', 'cookieValue');    
    //注:如果没有设置cookie的有效期,则cookie默认在浏览器关闭前都有效,故被称为"会话cookie"。  
      
    // 创建一个cookie并设置有效时间为7天:  
    $.cookie('cookieName', 'cookieValue', { expires: 7 });  
      
    // 创建一个cookie并设置cookie的有效路径:  
    $.cookie('cookieName', 'cookieValue', { expires: 7, path: '/' });  
      
    //读取cookie:  
    $.cookie('cookieName'); // 若cookie存在则返回'cookieValue';若cookie不存在则返回null   
      
    //删除cookie:把ncookie的值设为null即可  
    $.cookie('the_cookie', null); 

    可参考地址:w3school:JavaScript Cookies

     
  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/moqiutao/p/7516446.html
Copyright © 2011-2022 走看看