首页 文章

如何从cookie创建和读取值?

提问于
浏览
223

如何在JavaScript中创建和读取cookie中的值?

16 回答

  • 6

    以下是可用于创建和检索Cookie的函数 .

    var createCookie = function(name, value, days) {
        var expires;
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            expires = "; expires=" + date.toGMTString();
        }
        else {
            expires = "";
        }
        document.cookie = name + "=" + value + expires + "; path=/";
    }
    
    function getCookie(c_name) {
        if (document.cookie.length > 0) {
            c_start = document.cookie.indexOf(c_name + "=");
            if (c_start != -1) {
                c_start = c_start + c_name.length + 1;
                c_end = document.cookie.indexOf(";", c_start);
                if (c_end == -1) {
                    c_end = document.cookie.length;
                }
                return unescape(document.cookie.substring(c_start, c_end));
            }
        }
        return "";
    }
    
  • 14

    JQuery Cookies

    或普通的Javascript:

    function setCookie(c_name,value,exdays)
    {
       var exdate=new Date();
       exdate.setDate(exdate.getDate() + exdays);
       var c_value=escape(value) + ((exdays==null) ? "" : ("; expires="+exdate.toUTCString()));
       document.cookie=c_name + "=" + c_value;
    }
    
    function getCookie(c_name)
    {
       var i,x,y,ARRcookies=document.cookie.split(";");
       for (i=0; i<ARRcookies.length; i++)
       {
          x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
          y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
          x=x.replace(/^\s+|\s+$/g,"");
          if (x==c_name)
          {
            return unescape(y);
          }
       }
    }
    
  • 0

    简约和全功能的ES6方法:

    const setCookie = (name, value, days = 7, path = '/') => {
      const expires = new Date(Date.now() + days * 864e5).toUTCString()
      document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=' + path
    }
    
    const getCookie = (name) => {
      return document.cookie.split('; ').reduce((r, v) => {
        const parts = v.split('=')
        return parts[0] === name ? decodeURIComponent(parts[1]) : r
      }, '')
    }
    
    const deleteCookie = (name, path) => {
      setCookie(name, '', -1, path)
    }
    
  • 2

    Mozilla提供了simple framework for reading and writing cookies with full unicode support以及如何使用它的示例 .

    一旦包含在页面上,您就可以设置一个cookie:

    docCookies.setItem(name, value);
    

    读一个cookie:

    docCookies.getItem(name);
    

    或删除cookie:

    docCookies.removeItem(name);
    

    例如:

    // sets a cookie called 'myCookie' with value 'Chocolate Chip'
    docCookies.setItem('myCookie', 'Chocolate Chip');
    
    // reads the value of a cookie called 'myCookie' and assigns to variable
    var myCookie = docCookies.getItem('myCookie');
    
    // removes the cookie called 'myCookie'
    docCookies.removeItem('myCookie');
    

    查看有关Mozilla's document.cookie page的更多示例和详细信息 .

  • 33

    我是一段很棒的代码:简单易用 . 但我通常使用babel和ES6以及模块,所以如果你像我一样,这里是复制的代码,以便用ES6更快地开发

    Accepted answer用ES6重写为模块:

    export const createCookie = ({name, value, days}) => {
      let expires;
      if (days) {
        let date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = '; expires=' + date.toGMTString();
      } else {
        expires = '';
      }
      document.cookie = name + '=' + value + expires + '; path=/';
    };
    
    export const getCookie = ({name}) => {
      if (document.cookie.length > 0) {
        let c_start = document.cookie.indexOf(name + '=');
        if (c_start !== -1) {
          c_start = c_start + name.length + 1;
          let c_end = document.cookie.indexOf(';', c_start);
          if (c_end === -1) {
            c_end = document.cookie.length;
          }
          return unescape(document.cookie.substring(c_start, c_end));
        }
      }
      return '';
    };
    

    在此之后,您可以将其导入为任何模块(当然路径可能会有所不同):

    import {createCookie, getCookie} from './../helpers/Cookie';
    
  • 6

    对于那些需要像{foo:'bar'}这样的保存对象的人,我分享了@ KevinBurke答案的编辑版本 . 我添加了JSON.stringify和JSON.parse,这就是全部 .

    cookie = {
    
        set: function (name, value, days) {
            if (days) {
                var date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                var expires = "; expires=" + date.toGMTString();
            }
            else
                var expires = "";
            document.cookie = name + "=" + JSON.stringify(value) + expires + "; path=/";
        },
    
        get : function(name){
            var nameEQ = name + "=",
                ca = document.cookie.split(';');
    
            for(var i=0;i < ca.length;i++) {
              var c = ca[i];
              while (c.charAt(0)==' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) == 0) 
                  return  JSON.parse(c.substring(nameEQ.length,c.length));
            }
    
            return null;
        }
    
    }
    

    所以,现在你可以做这样的事情:

    cookie.set('cookie_key', {foo: 'bar'}, 30);
    
    cookie.get('cookie_key'); // {foo: 'bar'}
    
    cookie.set('cookie_key', 'baz', 30);
    
    cookie.get('cookie_key'); // 'baz'
    
  • 208

    这是Get, Set and Delete Cookie in JavaScript的代码 .

    function getCookie(name) {
        name = name + "=";
        var cookies = document.cookie.split(';');
        for(var i = 0; i <cookies.length; i++) {
            var cookie = cookies[i];
            while (cookie.charAt(0)==' ') {
                cookie = cookie.substring(1);
            }
            if (cookie.indexOf(name) == 0) {
                return cookie.substring(name.length,cookie.length);
            }
        }
        return "";
    }
    
    function setCookie(name, value, expirydays) {
     var d = new Date();
     d.setTime(d.getTime() + (expirydays*24*60*60*1000));
     var expires = "expires="+ d.toUTCString();
     document.cookie = name + "=" + value + "; " + expires;
    }
    
    function deleteCookie(name){
      setCookie(name,"",-1);
    }
    

    资料来源:http://mycodingtricks.com/snippets/javascript/javascript-cookies/

  • -1

    我用这个对象 . 值是编码的,因此在从服务器端读取或写入时需要考虑它 .

    cookie = (function() {
    
    /**
     * Sets a cookie value. seconds parameter is optional
     */
    var set = function(name, value, seconds) {
        var expires = seconds ? '; expires=' + new Date(new Date().getTime() + seconds * 1000).toGMTString() : '';
        document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/';
    };
    
    var map = function() {
        var map = {};
        var kvs = document.cookie.split('; ');
        for (var i = 0; i < kvs.length; i++) {
            var kv = kvs[i].split('=');
            map[kv[0]] = decodeURIComponent(kv[1]);
        }
        return map;
    };
    
    var get = function(name) {
        return map()[name];
    };
    
    var remove = function(name) {
        set(name, '', -1);
    };
    
    return {
        set: set,
        get: get,
        remove: remove,
        map: map
    };
    
    })();
    
  • 39

    ES7,使用正则表达式获取get() . 基于MDN

    const Cookie =
        { get: name => {
            let c = document.cookie.match(`(?:(?:^|.*; *)${name} *= *([^;]*).*$)|^.*$`)[1]
            if (c) return decodeURIComponent(c)
            }
        , set: (name, value, opts = {}) => { 
            if (opts.days) { 
                opts['max-age'] = opts.days * 60 * 60 * 24; 
                delete opts.days 
                }
            opts = Object.entries(opts).reduce((str, [k, v]) => `${str}; ${k}=${v}`, '')
            document.cookie = name + '=' + encodeURIComponent(value) + opts
            }
        , delete: (name, opts) => Cookie.set(name, '', {'max-age': -1, ...opts}) 
        // path & domain must match cookie being deleted 
        }
    

    Cookie.set('user', 'Jim', {path: '/', days: 10}) 
    // Set the path to top level (instead of page) and expiration to 10 days (instead of session)
    

    用法 - Cookie.get(name,value [,options]):
    options支持所有标准cookie选项并添加"days":

    • path :'/' - 任何绝对路径 . 默认值:当前文档位置,

    • domain :'sub.example.com' - 可能无法以点开头 . 默认值:没有子域的当前主机 .

    • secure :true - 仅通过https提供cookie . 默认值:false .

    • days :2天,直到cookie过期 . 默认值:会话结束 .
      设置过期的其他方法:

    • expires :'Sun, 18 Feb 2018 16:23:42 GMT' - 作为GMT字符串的到期日期 .
      当前日期可以使用:new Date(Date.now()) . toUTCString()

    • 'max-age' :30 - 与天相同,但以秒为单位而不是天 .

    其他答案使用“expires”而不是“max-age”来支持旧的IE版本 . 这个方法需要ES7,所以IE7无论如何都是出局的(这不是什么大问题) .

    注意:支持有趣的字符,如"="和""作为cookie值,正则表达式处理前导和尾随空格(来自其他库) .
    如果您想存储对象,可以使用和JSON.stringify和JSON.parse之前和之后对它们进行编码,编辑上面的内容,或添加其他方法 . 例如:

    Cookie.getJSON = name => JSON.parse(Cookie.get(name))
    Cookie.setJSON = (name, value, opts) => Cookie.set(name, JSON.stringify(value), opts);
    
  • -1

    在ES6中读取cookie的简单方法 .

    function getCookies() {
        var cookies = {};
        for (let cookie of document.cookie.split('; ')) {
            let [name, value] = cookie.split("=");
            cookies[name] = decodeURIComponent(value);
        }
        console.dir(cookies);
    }
    
  • -1

    我用js-cookie来取得成功 .

    <script src="/path/to/js.cookie.js"></script>
    <script>
      Cookies.set('foo', 'bar');
      Cookies.get('foo');
    </script>
    
  • 4

    readCookie的改进版本:

    function readCookie( name )
    {
        var cookieParts = document.cookie.split( ';' )
        ,   i           = 0
        ,   part
        ,   part_data
        ,   value
        ;
    
        while( part = cookieParts[ i++ ] )
        {
            part_data = part.split( '=' );
    
            if ( part_data.shift().replace(/\s/, '' ) === name )
            {
                value = part_data.shift();
                break;
            }
    
        }
        return value;
    }
    

    一旦找到cookie值并返回其值,这应该会中断 . 在我看来,双重分裂非常优雅 .

    if条件的替换是空白修剪,以确保它正确匹配

  • -1
    function setCookie(cname,cvalue,exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays*24*60*60*1000));
        var expires = "expires=" + d.toGMTString();
        document.cookie = cname+"="+cvalue+"; "+expires;
    }
    
    function getCookie(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i=0; i<ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') c = c.substring(1);
            if (c.indexOf(name) == 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    }
    
    function checkCookie() {
        var user=getCookie("username");
        if (user != "") {
            alert("Welcome again " + user);
        } else {
           user = prompt("Please enter your name:","");
           if (user != "" && user != null) {
               setCookie("username", user, 30);
           }
        }
    }
    
  • -1

    我编写了简单的cookieUtils,它有三个函数用于创建cookie,读取cookie和删除cookie .

    var CookieUtils = {
        createCookie: function (name, value, expireTime) {
            expireTime = !!expireTime ? expireTime : (15 * 60 * 1000); // Default 15 min
            var date = new Date();
            date.setTime(date.getTime() + expireTime);
            var expires = "; expires=" + date.toGMTString();
            document.cookie = name + "=" + value + expires + "; path=/";
        },
        getCookie: function (name) {
            var value = "; " + document.cookie;
            var parts = value.split("; " + name + "=");
            if (parts.length == 2) {
                return parts.pop().split(";").shift();
            }
        },
        deleteCookie: function(name) {
            document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
        }
    };
    
  • 2

    阅读cookie的一种厚颜无耻且简单的方法可能是:

    let username, id; 
    eval(document.cookie); 
    console.log(username + ", " + id); // John Doe, 123
    

    如果您知道您的cookie包含以下内容,则可以使用此选项: username="John Doe"; id=123; . 请注意,字符串在cookie中需要引号 . 可能不是推荐的方式,但适用于测试/学习 .

  • 0

    以下是w3chools中提到的示例 .

    function setCookie(cname, cvalue, exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays*24*60*60*1000));
        var expires = "expires="+ d.toUTCString();
        document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
    }
    
    function getCookie(cname) {
        var name = cname + "=";
        var decodedCookie = decodeURIComponent(document.cookie);
        var ca = decodedCookie.split(';');
        for(var i = 0; i <ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    }
    

相关问题