Get cookie by name

前端 未结 30 1411
野的像风
野的像风 2020-11-22 03:58

I have a getter to get the value from a cookie.

Now I have 2 cookies by the name shares= and by the name obligations= .

I want to

相关标签:
30条回答
  • 2020-11-22 04:39

    I wrote something that might be easy to use, If anyone has some things to add, feel free to do so.

    function getcookie(name = '') {
        let cookies = document.cookie;
        let cookiestore = {};
        
        cookies = cookies.split(";");
        
        if (cookies[0] == "" && cookies[0][0] == undefined) {
            return undefined;
        }
        
        cookies.forEach(function(cookie) {
            cookie = cookie.split(/=(.+)/);
            if (cookie[0].substr(0, 1) == ' ') {
                cookie[0] = cookie[0].substr(1);
            }
            cookiestore[cookie[0]] = cookie[1];
        });
        
        return (name !== '' ? cookiestore[name] : cookiestore);
    }
    

    Usage

    getcookie() - returns an object with all cookies on the web page.

    getcookie('myCookie') - returns the value of the cookie myCookie from the cookie object, otherwise returns undefined if the cookie is empty or not set.


    Example

    // Have some cookies :-)
    document.cookie = "myCookies=delicious";
    document.cookie = "myComputer=good";
    document.cookie = "myBrowser=RAM hungry";
    
    // Read them
    console.log( "My cookies are " + getcookie('myCookie') );
    // Outputs: My cookies are delicious
    
    console.log( "My computer is " + getcookie('myComputer') );
    // Outputs: My computer is good
    
    console.log( "My browser is " + getcookie('myBrowser') );
    // Outputs: My browser is RAM hungry
    
    console.log( getcookie() );
    // Outputs: {myCookie: "delicious", myComputer: "good", myBrowser: "RAM hungry"}
    
    // (does cookie exist?)
    if (getcookie('hidden_cookie')) {
        console.log('Hidden cookie was found!');
    } else {
        console.log('Still no cookie :-(');
    }
    
    // (do any cookies exist?)
    if (getcookie()) {
        console.log("You've got cookies to eat!");
    } else {
        console.log('No cookies for today :-(');
    }
    
    0 讨论(0)
  • 2020-11-22 04:40

    Here is a pretty short version

     function getCookie(n) {
        let a = `; ${document.cookie}`.match(`;\\s*${n}=([^;]+)`);
        return a ? a[1] : '';
    }
    

    Note that I made use of ES6's template strings to compose the regex expression.

    0 讨论(0)
  • 2020-11-22 04:40

    kirlich gave a good solution. However, it fails when there are two cookie values with similar names, here is a simple fix for this situation:

    function getCookie(name) {
      var value = "; " + document.cookie;
      var parts = value.split("; " + name + "=");
      if (parts.length >= 2) return parts.pop().split(";").shift();
    }
    
    0 讨论(0)
  • 2020-11-22 04:40

    It seems to me you could split the cookie key-value pairs into an array and base your search on that:

    var obligations = getCookieData("obligations");
    

    Which runs the following:

    function getCookieData( name ) {
        var pairs = document.cookie.split("; "),
            count = pairs.length, parts; 
        while ( count-- ) {
            parts = pairs[count].split("=");
            if ( parts[0] === name )
                return parts[1];
        }
        return false;
    }
    

    Fiddle: http://jsfiddle.net/qFmPc/

    Or possibly even the following:

    function getCookieData( name ) {
        var patrn = new RegExp( "^" + name + "=(.*?);" ),
            patr2 = new RegExp( " " + name + "=(.*?);" );
        if ( match = (document.cookie.match(patrn) || document.cookie.match(patr2)) )
            return match[1];
        return false;
    }
    
    0 讨论(0)
  • 2020-11-22 04:40

    My solution is this:

    function getCookieValue(cookieName) {
        var ca = document.cookie.split('; ');
        return _.find(ca, function (cookie) {
            return cookie.indexOf(cookieName) === 0;
        });
    }
    

    This function uses the Underscorejs _.find-function. Returns undefined if cookie name doesn't exist

    0 讨论(0)
  • 2020-11-22 04:40

    Just use the following function (a pure javascript code)

    const getCookie = (name) => {
     const cookies = Object.assign({}, ...document.cookie.split('; ').map(cookie => {
        const name = cookie.split('=')[0];
        const value = cookie.split('=')[1];
    
        return {[name]: value};
      }));
    
      return cookies[name];
    };
    
    0 讨论(0)
提交回复
热议问题