Cookie op naam ophalen

Ik heb een methode om de waarde uit een cookie te halen.

Nu heb ik 2 cookies met de naam shares=en met de naam obligations=.

Ik wil deze getter alleen maken om de waarden uit de verplichtingencookie te halen.

Hoe doe ik dit? Dus de forsplitst de gegevens in afzonderlijke waarden en plaatst deze in een array.

function getCookie1() {
    // What do I have to add here to look only in the "obligations=" cookie? 
    // Because now it searches all the cookies.
    var elements = document.cookie.split('=');
    var obligations= elements[1].split('%');
    for (var i = 0; i < obligations.length - 1; i++) {
        var tmp = obligations[i].split('$');
        addProduct1(tmp[0], tmp[1], tmp[2], tmp[3]);
    }
 }

Antwoord 1, autoriteit 100%

Eén benadering, die het herhalen van een array vermijdt, zou zijn:

function getCookie(name) {
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) return parts.pop().split(';').shift();
}

Overzicht

Het splitsen van een string per token levert ofwel een array op met één string (dezelfde waarde), in het geval dat token niet bestaat in een string, of een array met twee strings , in het geval dat een token wordt gevonden in een string .

Het eerste (linker) element is de reeks van wat er vóór het token was, en het tweede (rechts) is wat de reeks is van wat er na het token was.

(OPMERKING: als string begint met een token, is het eerste element een lege string)

Aangezien cookies als volgt worden opgeslagen:

"{name}={value}; {name}={value}; ..."

om een specifieke cookiewaarde op te halen, hebben we alleen een string nodig die na “; {name}=” en voor de volgende “;” staat. Voordat we enige verwerking uitvoeren, plaatsen we de cookiesreeks met “; “, zodat elke cookienaam, inclusief de eerste, wordt omsloten door “; ” en “=”:

"; {name}={value}; {name}={value}; ..."

Nu kunnen we eerst splitsen door “; {name}=”, en als token wordt gevonden in een cookiestring (dwz we hebben twee elementen), zullen we eindigen met het tweede element dat een string is die begint met onze cookie waarde. Dan halen we dat uit een array (d.w.z. pop), en herhalen hetzelfde proces, maar nu met “;” als een token, maar deze keer trekt u de linker string uit (d.w.z. shift) om de werkelijke token-waarde te krijgen.


Antwoord 2, autoriteit 35%

Ik zou liever een enkele reguliere expressie-overeenkomst op de cookie gebruiken:

window.getCookie = function(name) {
  var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
  if (match) return match[2];
}

OF We kunnen ook als functie gebruiken, zie onderstaande code.

function check_cookie_name(name) 
    {
      var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
      if (match) {
        console.log(match[2]);
      }
      else{
           console.log('--something went wrong---');
      }
   }

Verbeterd dankzij Scott Jungwirth in de reacties.


Antwoord 3, autoriteit 18%

gebruik een script voor het ophalen van cookies:

function readCookie(name) {
    var nameEQ = name + "=";
    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,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

noem het dan:

var value = readCookie('obligations');

ik heb de bovenstaande code gestolen van de quirksmode-cookiepagina. je zou het moeten lezen.


Antwoord 4, autoriteit 10%

Als je jQuery gebruikt, raad ik je aan deze plug-in te gebruiken:

https://github.com/carhartl/jquery-cookie
https://github.com/carhartl/jquery-cookie/blob/master/jquery. cookie.js

<script type="text/javascript"
 src="//cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js">

U kunt cookies dus als volgt lezen:

var value = $.cookie("obligations");

U kunt ook een cookie schrijven:

$.cookie('obligations', 'new_value');
$.cookie('obligations', 'new_value', { expires: 14, path: '/' });

Cookie verwijderen:

$.removeCookie('obligations');

Antwoord 5, autoriteit 10%

De methoden in sommige van de andere antwoorden die een reguliere expressie gebruiken, dekken niet alle gevallen, met name:

  1. Wanneer de cookie de laatste cookie is. In dit geval staat er geen puntkomma achter de cookiewaarde.
  2. Als een andere cookienaam eindigt met de naam die wordt opgezocht. U zoekt bijvoorbeeld naar de cookie met de naam “one”, en er is een cookie met de naam “done”.
  3. Als de cookienaam tekens bevat die niet als zichzelf worden geïnterpreteerd wanneer ze in een reguliere expressie worden gebruikt, tenzij ze worden voorafgegaan door een backslash.

De volgende methode behandelt deze gevallen:

function getCookie(name) {
    function escape(s) { return s.replace(/([.*+?\^$(){}|\[\]\/\\])/g, '\\$1'); }
    var match = document.cookie.match(RegExp('(?:^|;\\s*)' + escape(name) + '=([^;]*)'));
    return match ? match[1] : null;
}

Hiermee wordt nullgeretourneerd als de cookie niet wordt gevonden. Het zal een lege string teruggeven als de waarde van de cookie leeg is.

Opmerkingen:

  1. Deze functie gaat ervan uit dat cookienamen hoofdlettergevoelig zijn.
  2. document.cookie– Wanneer dit aan de rechterkant van een toewijzing verschijnt, vertegenwoordigt het een tekenreeks met een door puntkomma’s gescheiden lijst van cookies, die op hun beurt name=value-paren zijn. Er lijkt een enkele spatie te staan na elke puntkomma.
  3. String.prototype.match()– Retourneert nullwanneer er geen overeenkomst is gevonden. Retourneert een array wanneer een overeenkomst is gevonden, en het element op index [1]is de waarde van de eerste overeenkomende groep.

Opmerkingen over normale expressie:

  1. (?:xxxx)– vormt een niet-overeenkomende groep.
  2. ^– komt overeen met het begin van de tekenreeks.
  3. |– scheidt alternatieve patronen voor de groep.
  4. ;\\s*– komt overeen met één puntkomma gevolgd door nul of meer witruimtetekens.
  5. =– komt overeen met één gelijkteken.
  6. (xxxx)– vormt een overeenkomende groep.
  7. [^;]*– komt overeen met nul of meer tekens behalve een puntkomma. Dit betekent dat het overeenkomt met tekens tot, maar niet inclusief, een puntkomma of aan het einde van de tekenreeks.

Antwoord 6, autoriteit 6%

4 jaar later, ES6 veel eenvoudigere versie.

function getCookie(name) {
  let cookie = {};
  document.cookie.split(';').forEach(function(el) {
    let [k,v] = el.split('=');
    cookie[k.trim()] = v;
  })
  return cookie[name];
}

Ik heb ook een gistgemaakt om deze te gebruiken als een Cookievoorwerp. bijv. Cookie.set(name,value)en Cookie.get(name)

Dit leest alle cookies in plaats van door te scannen. Het is oké voor een klein aantal cookies.


Antwoord 7, autoriteit 5%

Hier is een one-liner om een cookie met een specifieke naam te krijgen zonder de noodzaak van een extern lib:

var cookie = ("; "+document.cookie).split("; YOUR_COOKIE_NAME=").pop().split(";").shift();

Dit antwoord is gebaseerd op de briljante oplossing van kirlich. Het enige compromis van deze oplossing is dat je een lege string krijgt als de cookie niet bestaat. In de meeste gevallen zou dit echter geen dealbreaker moeten zijn.


Antwoord 8, autoriteit 4%

Ik heb de functie aangepast die Jonathan hier heeft geleverd, door reguliere expressies te gebruiken, kun je een cookiewaarde krijgen door zijn naam als volgt:

function getCookie(name){
    var pattern = RegExp(name + "=.[^;]*")
    var matched = document.cookie.match(pattern)
    if(matched){
        var cookie = matched[0].split('=')
        return cookie[1]
    }
    return false
}

Als het een lege string retourneert, betekent dit dat de cookie bestaat maar geen waarde heeft, als het false retourneert, bestaat de cookie niet. Ik hoop dat dit helpt.


Antwoord 9, autoriteit 2%

Ik weet dat het een oude vraag is, maar ik kwam dit probleem ook tegen. Even voor de goede orde: er is een kleine API in de mozilla-webpaginavan ontwikkelaars.

Joy kan elke cookie op naam krijgen met alleen JS. De code is ook schoner IMHO (behalve de lange regel, die je ongetwijfeld gemakkelijk kunt oplossen).

function getCookie(sKey) {
    if (!sKey) { return null; }
    return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
}

Zoals vermeld in de opmerkingen, moet u er rekening mee houden dat deze methode ervan uitgaat dat de sleutel en waarde zijn gecodeerd met encodeURIComponent(). Verwijder decoderen & encodeURIComponent() als de sleutel en waarde van de cookie niet zijn gecodeerd.


Antwoord 10, autoriteit 2%

U kunt de bibliotheek js-cookiegebruiken om JavaScript-cookies op te halen en in te stellen.

Opnemen in uw HTML:

<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>

Een cookie maken:

Cookies.set('name', 'value');

Een cookie lezen:

Cookies.get('name'); // => 'value'

Antwoord 11, autoriteit 2%

Hier is een vrij korte versie

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

Merk op dat ik de sjabloonreeksen van ES6 heb gebruikt om de regex-expressie samen te stellen.


Antwoord 12, autoriteit 2%

Mijn enige lineaire functie om de waardecookie bij zijn sleutel te krijgen.

cookie = key=>((new RegExp((key || '=')+'=(.*?); ','gm')).exec(document.cookie+'; ') ||['',null])[1]

Cookiefunctie aanroepen als

cookie('some-key')

Antwoord 13

Gebruik object.defineProperty

Hiermee hebt u gemakkelijk toegang tot cookies

Object.defineProperty(window, "Cookies", {
    get: function() {
        return document.cookie.split(';').reduce(function(cookies, cookie) {
            cookies[cookie.split("=")[0]] = unescape(cookie.split("=")[1]);
            return cookies
        }, {});
    }
});

Vanaf nu kun je gewoon doen:

alert( Cookies.obligations );

Dit wordt ook automatisch bijgewerkt, dus als u een cookie wijzigt, veranderen de Cookiesook.


Antwoord 14

kirlichgaf een goede oplossing. Het mislukt echter wanneer er twee cookiewaarden zijn met vergelijkbare namen, hier is een eenvoudige oplossing voor deze situatie:

function getCookie(name) {
  var value = "; " + document.cookie;
  var parts = value.split("; " + name + "=");
  if (parts.length >= 2) return parts.pop().split(";").shift();
}

Antwoord 15

function getCookie(name) {
    var pair = document.cookie.split('; ').find(x => x.startsWith(name+'='));
    if (pair)
       return pair.split('=')[1]
}

Antwoord 16

Het lijkt mij dat u de cookiesleutel-waardeparen in een array kunt splitsen en uw zoekopdracht daarop kunt baseren:

var obligations = getCookieData("obligations");

Met het volgende:

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/

Of misschien zelfs het volgende:

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;
}

Antwoord 17

werkt altijd goed:

function getCookie(cname) {
    var name = cname + "=",
        ca = document.cookie.split(';'),
        i,
        c,
        ca_length = ca.length;
    for (i = 0; i < ca_length; i += 1) {
        c = ca[i];
        while (c.charAt(0) === ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) !== -1) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}
function setCookie(variable, value, expires_seconds) {
    var d = new Date();
    d = new Date(d.getTime() + 1000 * expires_seconds);
    document.cookie = variable + '=' + value + '; expires=' + d.toGMTString() + ';';
}

Geen vereisten voor jQuery of iets dergelijks. Pure oude goede JavaScript.


Antwoord 18

Eenvoudige functie voor Cookie ophalen met cookienaam:

function getCookie(cn) {
    var name = cn+"=";
    var allCookie = decodeURIComponent(document.cookie).split(';');
    var cval = [];
    for(var i=0; i < allCookie.length; i++) {
        if (allCookie[i].trim().indexOf(name) == 0) {
            cval = allCookie[i].trim().split("=");
        }   
    }
    return (cval.length > 0) ? cval[1] : "";
}

Antwoord 19

Blijkbaar heeft MDN nog nooit gehoord van de woordgrens regex-tekenklasse \b, die overeenkomt met aaneengesloten \w+die aan weerszijden wordt begrensd door \W+:

getCookie = function(name) {
    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return r ? r[1] : null;
};
var obligations = getCookie('obligations');

Antwoord 20

Object.fromEntries(document.cookie.split('; ').map(v=>v.split('=').map(decodeURIComponent)))

Eén voering om cookie om te zetten in JavaScript-object of kaart

new Map(document.cookie.split('; ').map(v=>v.split('=').map(decodeURIComponent)))

Antwoord 21

In mijn projecten gebruik ik de volgende functie om toegang te krijgen tot cookies op naam

function getCookie(cookie) {
    return document.cookie.split(';').reduce(function(prev, c) {
        var arr = c.split('=');
        return (arr[0].trim() === cookie) ? arr[1] : prev;
    }, undefined);
}

Antwoord 22

Er zijn hier al leuke antwoorden voor het verkrijgen van de cookie, maar hier is mijn eigen oplossing:

function getcookie(cookiename){
var cookiestring  = document.cookie;
var cookiearray = cookiestring.split(';');
for(var i =0 ; i < cookiearray.length ; ++i){ 
    if(cookiearray[i].trim().match('^'+cookiename+'=')){ 
        return cookiearray[i].replace(`${cookiename}=`,'').trim();
    }
} return null;
}

gebruik:`

    getcookie('session_id');
   // gets cookie with name session_id

Antwoord 23

ingesteld door javascript

document.cookie = 'cookiename=tesing';

kom bij jQuery met de jquery-cookie-plug-in

var value = $.cookie("cookiename");
alert(value);

Antwoord 24

referentie: https://developer.mozilla.org /nl-NL/docs/Web/API/Document/cookie

document.cookie = "test1=Hello";
document.cookie = "test2=World";
var cookieValue = document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1");
  alert(cookieValue);

Antwoord 25

Mijn oplossing is deze:

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

Deze functie gebruikt de Underscorejs _.find-functie. Retourneert ongedefinieerd als de cookienaam niet bestaat


Antwoord 26

Ik heb het op deze manier gedaan. zodat ik een object krijg om toegang te krijgen om de waarden te scheiden. Hiermee kun je de cookie doorgeven aan de ouder en dan heb je toegang tot je waarden met de toetsen zoals

var cookies=getCookieVal(mycookie);
alert(cookies.mykey);
function getCookieVal(parent) {
            var cookievalue = $.cookie(parent).split('&');
            var obj = {};
            $.each(cookievalue, function (i, v) {
                var key = v.substr(0, v.indexOf("="));
                var val = v.substr(v.indexOf("=") + 1, v.length);
                obj[key] = val;
            });
            return obj;
        }  

Antwoord 27

Gebruik gewoon de volgende functie (een 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];
};

Antwoord 28

Ik heb iets geschreven dat misschien gemakkelijk te gebruiken is. Als iemand iets toe te voegen heeft, voel je vrij om dat te doen.

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);
}

Gebruik

getcookie()– retourneert een object met alle cookies op de webpagina.

getcookie('myCookie')– retourneert de waarde van de cookie myCookie van het cookie-object, anders wordt undefined geretourneerd als de cookie leeg of niet ingesteld is.


Voorbeeld

// 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 :-(');
}

Antwoord 29

Een functionele benadering om bestaande cookies te vinden. Het retourneert een array, dus het ondersteunt meerdere exemplaren van dezelfde naam. Het ondersteunt geen gedeeltelijke sleutelovereenkomst, maar het is triviaal om de === in het filter te vervangen door een regex.

function getCookie(needle) {
    return document.cookie.split(';').map(function(cookiestring) {
        cs = cookiestring.trim().split('=');
        if(cs.length === 2) {
            return {'name' : cs[0], 'value' : cs[1]};
        } else {
            return {'name' : '', 'value' : ''};
        }
    })
    .filter(function(cookieObject) { 
        return (cookieObject.name === needle);
    });
}

Antwoord 30

Koop cookie op naam, geef gewoon de naam van het cookie door aan onderstaande functie

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 "";
}

Other episodes