Dapatkan cookie berdasarkan nama

362

Saya punya pengambil untuk mendapatkan nilai dari cookie.

Sekarang saya memiliki 2 cookie dengan nama shares=dan nama obligations=.

Saya ingin membuat pengambil ini hanya untuk mendapatkan nilai dari cookie kewajiban.

Bagaimana saya melakukan ini? Jadi formembagi data menjadi nilai-nilai yang terpisah dan meletakkannya dalam 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]);
    }
 }
Neuron
sumber
apakah ada beberapa resin Anda tidak hanya membuatnya menjadi array?
webLacky3rdClass
membuat cookie menjadi array yang harus saya katakan.
webLacky3rdClass
Tidak, bagaimana saya bisa melakukan itu?
Kemungkinan rangkap dari Apa fungsi terpendek untuk membaca cookie dengan nama dalam JavaScript?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Anda mungkin ingin menerima jawaban: pertanyaan Anda masih ditandai sebagai belum dijawab.
Soleil - Mathieu Prévot

Jawaban:

499

Satu pendekatan, yang menghindari iterasi pada array, adalah:

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

Panduan

Memisahkan sebuah string dengan token akan menghasilkan, array dengan satu string (nilai yang sama), dalam kasus token tidak ada dalam string, atau array dengan dua string, dalam kasus token ditemukan dalam sebuah string.

Elemen pertama (kiri) adalah string dari apa yang sebelum token, dan yang kedua (kanan) adalah string dari apa yang setelah token.

(CATATAN: jika string dimulai dengan token, elemen pertama adalah string kosong)

Mempertimbangkan bahwa cookie disimpan sebagai berikut:

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

untuk mengambil nilai cookie tertentu, kita hanya perlu mendapatkan string setelah "; {name} =" dan sebelum next ";". Sebelum kami melakukan pemrosesan, kami menambahkan string cookie dengan ";", sehingga setiap nama cookie, termasuk yang pertama, dilampirkan dengan ";" dan "=":

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

Sekarang, kita dapat membaginya dengan "; {name} =", dan jika token ditemukan dalam string cookie (yaitu kita memiliki dua elemen), kita akan berakhir dengan elemen kedua menjadi string yang dimulai dengan nilai cookie kita. Lalu kita tarik itu dari array (yaitu pop), dan ulangi proses yang sama, tetapi sekarang dengan ";" sebagai token, tapi kali ini menarik keluar string kiri (yaitu shift) untuk mendapatkan nilai token yang sebenarnya.

kirlich
sumber
13
@ user3132564 mencoba menyunting ini, tetapi sebenarnya itu adalah komentar: Metode ini mengembalikan nilai yang salah ketika Anda mencari sufiks cookie - jika nilai document.cookie adalah "FirstName = John" dan Anda memanggil getCookie ("Nama "), Anda akan mendapatkan kembali" John "meskipun tidak ada cookie dengan nama itu. Ini juga tidak berfungsi jika satu nama cookie adalah akhiran dari yang lain - jika document.cookie adalah "Name = John; LastName = Doe", memanggil split ("Name =") mengembalikan array dengan tiga string dan metode tidak t mengembalikan nilai yang tepat untuk getCookie ("Nama").
Dennis Jaheruddin
20
Peringatan tentang implementasi dalam jawaban ini: jika ada lebih dari satu cookie dengan nama yang sama maka tidak ada nilai cookie akan dikembalikan. Misalnya, jika ada cookie bernama stackToken yang disetel untuk domain .stackexchange.com dan juga programer.stackexchange.com, maka jika Anda memanggil getCookie ("stackToken") tidak ada nilai yang akan dikembalikan - parts.length akan lebih besar dari 2. Jika Anda tahu semua nilai cookie untuk nama yang sama (tetapi domain dan jalur yang berbeda) akan sama, lihat jawaban yang diterima di sini: stackoverflow.com/questions/5639346/…
jlpp
7
@DennisJaheruddin - Sepertinya masalah sufiks telah diperbaiki.
Nathan JB
2
@ NathanJ.Brauer Anda benar. Diperbarui untuk mengatasi masalah itu sejak lama, tetapi membuat catatan hanya di changelog, bukan di komentar.
kirlich
ada kesalahannya. Jika cookie "nama" dan digarisbawahi dalam nama suka lain, IE 10+juga memberikan kesalahan. Misalnya: "user": "Joe", "user_name":"Doe"
BOZ
176

Saya lebih suka menggunakan satu kecocokan ekspresi reguler pada cookie:

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

ATAU Kami juga dapat menggunakannya sebagai fungsi, periksa kode di bawah ini.

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

Peningkatan berkat Scott Jungwirth dalam komentar.

Jonathan Camenisch
sumber
11
Ini dapat memiliki kecocokan salah jika dua cookie memiliki akhiran yang sama. Itu akan cocok dengan keduanya xyz=valuedan abcxyz=valuekapan name = xyz.
Brent Washburne
3
unescape((document.cookie.match(key + '=([^;].+?)(;|$)') || [])[1] || '');Versi modifikasi Glize / dom / Cookies
Valentin Podkamennyi
19
perbarui Regex untuk new RegExp('(^| )' + name + '=([^;]+)')menghindari masalah yang diangkat oleh @BrentWashburne. Saya juga membuat tes jsperf untuk ini dan jawaban dengan suara terbanyak, yang ini keluar sedikit di atas, tetapi jelas lebih sedikit kode dan lebih mudah untuk diikuti: jsperf.com/simple-get-cookie-by-name
Scott Jungwirth
5
@ScottJungwirth Ya, tetapi kemudian Anda harus memperbarui pernyataan kembali untuk mengembalikan kecocokan [2];
Joe
@ScottJungwirth Kenapa tidak new RegExp('(^|;)' + name + '=([^;]+)')? Di namebelakang dimulainya garis atau titik koma, mengapa spasi ``?
junlin
89

gunakan skrip penerimaan cookie:

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

lalu sebut itu:

var value = readCookie('obligations');

saya mencuri kode di atas dari halaman cookie quirksmode. Anda harus membacanya .

mkoryak
sumber
7
... yang mencuri kode dari W3schools. Wow. w3schools.com/js/js_cookies.asp
WillWam
Hei, setidaknya saya memberi kredit: p juga bagaimana Anda tahu bahwa itu yang asli?
mkoryak
Secara umum aman untuk menganggap W3S meletakkannya di sana terlebih dahulu. Mereka adalah rumah bagi banyak pemula yang memiliki kode ctrl-c.
WillWam
Sebenarnya sepertinya itu kebalikannya :) Quirksmode adalah / adalah situs yang bagus untuk kebiasaan browser dan ada sumber di sana juga. scottandrew.com
sunn0
Saya suka w3sekolah. mungkin platform terbaik untuk manula
Ralph Dingus
56

Jika Anda menggunakan jQuery, saya sarankan Anda untuk menggunakan plugin ini:

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

Jadi Anda dapat membaca cookie seperti ini:

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

Anda juga dapat menulis cookie:

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

Hapus cookie:

$.removeCookie('obligations');
trante
sumber
1
Tidak yakin mengapa ini belum terpilih sebagai jawaban terbaik. Ya itu jQuery dan bukan javascript tetapi pada saat yang sama ITU !!!!
Cozzbie
21
@Cozzbie mungkin menyertakan perpustakaan eksternal (dengan demikian menambahkan permintaan http lain) untuk mengambil nilai cookie adalah semacam kerja keras yang tidak perlu.
rahulserver
Saya mendapat pesan kesalahan "Referensi Tidak Ditarik: $ tidak didefinisikan" pada "$ .cookie". Meskipun saya menyertakan semua perpustakaan yang diperlukan seperti jquery.min.js dan perpustakaan yang disarankan dalam jawaban ini.
Adarsh ​​Singh
44

Metode dalam beberapa jawaban lain yang menggunakan ekspresi reguler tidak mencakup semua kasus, terutama:

  1. Ketika cookie adalah cookie terakhir. Dalam hal ini tidak akan ada titik koma setelah nilai cookie.
  2. Ketika nama cookie lain berakhir dengan nama tersebut sedang dicari. Misalnya, Anda mencari cookie yang bernama "one", dan ada cookie yang bernama "done".
  3. Ketika nama cookie termasuk karakter yang tidak diartikan sebagai diri mereka sendiri ketika digunakan dalam ekspresi reguler kecuali mereka didahului oleh garis miring terbalik.

Metode berikut menangani kasus ini:

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

Ini akan kembali nulljika cookie tidak ditemukan. Ini akan mengembalikan string kosong jika nilai cookie kosong.

Catatan:

  1. Fungsi ini menganggap nama cookie peka terhadap huruf besar-kecil .
  2. document.cookie- Ketika ini muncul di sisi kanan tugas, itu mewakili string yang berisi daftar cookie yang dipisahkan dengan titik koma, yang pada gilirannya name=valueberpasangan. Tampaknya ada ruang tunggal setelah setiap titik koma.
  3. String.prototype.match()- Kembali nullketika tidak ditemukan kecocokan. Mengembalikan array ketika kecocokan ditemukan, dan elemen pada indeks [1]adalah nilai dari kelompok yang cocok pertama.

Catatan Ekspresi Reguler:

  1. (?:xxxx) - membentuk grup yang tidak cocok.
  2. ^ - cocok dengan awal string.
  3. | - Memisahkan pola alternatif untuk grup.
  4. ;\\s* - cocok dengan satu titik koma diikuti oleh nol atau lebih karakter spasi putih.
  5. = - cocok dengan satu tanda sama dengan.
  6. (xxxx) - membentuk grup yang cocok.
  7. [^;]*- cocok dengan nol atau lebih karakter selain titik koma. Ini berarti akan cocok dengan karakter hingga, tetapi tidak termasuk, titik koma atau ke akhir string.
John S
sumber
4
Jawaban ini adalah fungsi terbaik dan terpendek yang berfungsi dalam semua kasus tanpa kecocokan salah. Ini juga memiliki penjelasan terbaik tentang cara kerjanya. Namun, fungsi pelarian tidak dijelaskan dan saya akan berpikir bahwa jika penulis membuat cookie, ia akan tahu apakah nama itu perlu diloloskan atau tidak. Jadi saya lebih suka melihat fungsi yang lebih pendek:function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
Jeff Baker
Jika itu menjadi alat generik, itu harus keluar dari nama atau melemparkan kesalahan jika nama tidak dapat disematkan langsung di regex. Orang yang tahu kendala aplikasi mereka dapat menghapus pelarian atau penjaga.
Joe Lapp
31

4 tahun kemudian, versi ES6 cara yang lebih sederhana.

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

Saya juga telah membuat inti untuk menggunakannya sebagai Cookieobjek. misalnya, Cookie.set(name,value)danCookie.get(name)

Ini membaca semua cookie alih-alih memindai. Tidak masalah untuk sejumlah kecil cookie.

allenhwkim
sumber
23

Saya telah memodifikasi fungsi yang disediakan Jonathan di sini, dengan menggunakan ekspresi reguler Anda bisa mendapatkan nilai cookie dengan namanya seperti ini:

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
}

Jika mengembalikan string kosong itu berarti cookie itu ada tetapi tidak memiliki nilai, jika itu mengembalikan false maka cookie itu tidak ada. Saya harap ini membantu.

Mohyaddin Alaoddin
sumber
Hanya ingin tahu, mengapa Anda tidak menggunakan varjalur 3? matched = ...
Victorio Berra
Maaf soal itu, lupa menulisnya.
Mohyaddin Alaoddin
14

Berikut ini adalah satu liner untuk mendapatkan cookie dengan nama tertentu tanpa perlu lib eksternal:

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

Jawaban ini didasarkan pada solusi brilian kirlich . Satu-satunya kompromi dari solusi ini adalah, bahwa Anda akan mendapatkan string kosong ketika cookie tidak ada. Dalam kebanyakan kasus ini seharusnya tidak menjadi pemecah kesepakatan.

Martin Braun
sumber
10

Saya tahu ini adalah pertanyaan lama tetapi saya juga menemukan masalah ini. Sekadar catatan, Ada sedikit API di halaman web pengembang mozilla .

Yoy bisa mendapatkan cookie apa pun dengan nama hanya menggunakan JS. Kode ini juga IMHO bersih (kecuali untuk garis panjang, yang saya yakin Anda dapat dengan mudah memperbaiki).

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

Sebagaimana dinyatakan dalam komentar, perhatikan bahwa metode ini mengasumsikan bahwa kunci dan nilai dikodekan menggunakan komponen encodeURIC (). Hapus decode & encodeURICon komponen () jika kunci dan nilai cookie tidak dikodekan.

Marc
sumber
1
Perlu diketahui bahwa metode mengasumsikan nama dan nilai cookie keduanya disandikan menggunakan encodeURIComponent()ketika cookie itu ditetapkan, yang akan benar jika Anda menggunakan fungsi pendamping untuk mengatur cookie, tetapi mungkin tidak selalu demikian. test
John S
@ JohnS Kita hanya bisa menghapus komponen decodeURIC, kan? (Jika kami tidak menggunakannya untuk mengatur cookie?) Apakah masih berfungsi?
NiCk Newman
Yap, baru saja menghapus decodeURI dan regexp ini adalah monster. Terima kasih Marc, terpilih!
NiCk Newman
10

Anda dapat menggunakan perpustakaan js-cookie untuk mendapatkan dan mengatur cookie JavaScript.

Sertakan ke HTML Anda:

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

Untuk membuat Cookie:

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

Untuk membaca Cookie:

Cookies.get('name'); // => 'value'
Lanil Marasinghe
sumber
8

Ini adalah versi yang cukup singkat

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

Perhatikan bahwa saya menggunakan string template ES6 untuk membuat ekspresi regex.

mfalade
sumber
2
Jawaban terbaik dari sekarang. Menggunakan fitur ES6. Ini tahun 2017 dan orang masih menggunakan var, +untuk menyatukan, dll -.- '
Elias Soares
@EliasSoares Apa masalah menggunakan var?
mrReiha
Bukan masalah, tetapi menggunakan let adalah praktik yang baik karena memiliki kelebihan dalam banyak situasi, dan hampir tidak ada kerugian
Elias Soares
7

Menggunakan object.defineProperty

Dengan ini, Anda dapat dengan mudah mengakses cookie

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

Mulai sekarang Anda bisa melakukan:

alert( Cookies.obligations );

Ini akan secara otomatis memperbarui juga, jadi jika Anda mengganti cookie, itu juga Cookiesakan berubah.

Downgoat
sumber
2
Sempurna! kecuali bahwa itu tidak akan berfungsi untuk objek yang memiliki beberapa karakter seperti tanda hubung (sebagai nama cookie), dan ketika membelah, objek memiliki ruang kosong terlebih dahulu jadi saya pergi cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ... Terima kasih!!
Samuel Elh
@Samuel Elh benar, tetapi Anda juga dapat menggunakan .trim () alih-alih ganti (/ / g, '')
mtizziani
7

kirlich memberikan solusi yang bagus. Namun, gagal ketika ada dua nilai cookie dengan nama yang mirip, berikut adalah perbaikan sederhana untuk situasi ini:

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

selalu bekerja dengan baik:

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

Tidak ada persyaratan untuk jQuery atau apapun. JavaScript tua yang baik dan murni.

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

Fungsi sederhana untuk Dapatkan cookie dengan nama cookie:

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] : "";
}
Saddam H
sumber
6

Rupanya MDN belum pernah mendengar tentang kelas karakter regex kata-batas \b, yang cocok dengan yang berdekatan \w+yang terikat di kedua sisi dengan \W+:

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

var obligations = getCookie('obligations');
cowbert
sumber
5

Menurut saya, Anda dapat membagi pasangan nilai kunci cookie menjadi array dan mendasarkan pencarian Anda pada hal itu:

var obligations = getCookieData("obligations");

Yang menjalankan sebagai berikut:

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/

Atau mungkin bahkan yang berikut ini:

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;
}
Sampson
sumber
1
apakah ada metode untuk menggunakan document.cookie.indexOf (nama) dan membandingkan?
@AndrejHefner Anda bisa, meskipun itu akan cocok dengan substring. Jadi, jika Anda memiliki nama cookie "foobar", dan satu bernama "bar", Anda mungkin bingung dengan "bar" di "foobar" dengan kunci "bar".
Sampson
@AndrejHefner Silakan lihat metode selanjutnya, yang seharusnya lebih cepat, karena memeriksa string untuk kecocokan.
Sampson
1
Metode kedua memiliki bug di mana ia tidak akan menemukan nilai cookie terakhir karena selalu mencari; pada akhirnya. Versi koreksi adalah:function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
Oz Solomon
5

Dalam proyek saya, saya menggunakan fungsi berikut untuk mengakses cookie berdasarkan nama

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

Jika Anda hanya perlu memeriksa apakah ada cookie, lakukan saja ini:

document.cookie.split('logged=true').length == 2

jika cookie yang dicatat = true ada, Anda akan mendapatkan 2, jika tidak 1.

login = true - ubah ini menjadi cookie Anda name = value, atau hanya nama

RTW
sumber
1
Bukankah itu lebih mudah dibaca untuk digunakan .indexOf() >= 0?
Vic Seedoubleyew
3

Sudah ada jawaban bagus di sini untuk mendapatkan cookie, Namun di sini ada solusi sendiri:

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

penggunaan: `

     getcookie('session_id');
   // gets cookie with name session_id
Mazino S Ukah
sumber
3

diatur oleh javascript

document.cookie = 'cookiename=tesing';

dapatkan dengan jquery dengan plugin jquery-cookie

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

alert(value);
Bhale Dino
sumber
@cytsunny - ini karena Anda harus memiliki plugin cookie jquery untuk menggunakan ini.
Alex Standiford
Wow .... apa info penting yang hilang sebelumnya .... Tapi dari tautan yang Anda berikan, tampaknya pemilik perpustakaan memutuskan untuk menghapus ketergantungan jquery dengan lebih baik.
cytsunny
2

Solusi saya adalah ini:

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

Fungsi ini menggunakan fungsi Underscorejs _.find. Pengembalian tidak terdefinisi jika nama cookie tidak ada

atlefren
sumber
2

Saya telah melakukannya dengan cara ini. sehingga saya mendapatkan objek untuk mengakses untuk memisahkan nilai-nilai. Dengan ini, Anda dapat meneruskan cookie ke induk dan kemudian Anda dapat mengakses nilai-nilai Anda dengan tombol seperti

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;
        }  
saydur rahman
sumber
1

Pendekatan fungsional untuk menemukan cookie yang ada. Ini mengembalikan array, sehingga mendukung banyak kejadian dengan nama yang sama. Itu tidak mendukung pencocokan kunci parsial, tetapi sepele untuk mengganti === dalam filter dengan 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);
    });
}
Aku laki-laki
sumber
1

Cukup gunakan fungsi berikut (kode javascript murni)

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];
};
Amjed Omar
sumber
1

Dapatkan cookie dengan nama, cukup berikan nama cookie ke fungsi di bawah ini

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 "";
}
Kalpit tandon
sumber
0

Fungsi berikut akan mengembalikan key-valuesepasang cookie yang diperlukan, di mana keynama cookie dan valueakan menjadi nilai cookie.

/**
 * Returns cookie key-value pair
 */
var getCookieByName = function(name) {
    var result = ['-1','-1'];
    if(name) {
        var cookieList = document.cookie.split(';');
        result = $.grep(cookieList,function(cookie) { 
            cookie = cookie.split('=')[0];
            return cookie == name;
        });
    }
    return result;
};
Suhail Gupta
sumber
0

Contoh cookie: contoh JS:

document.cookies = {
   create : function(key, value, time){
     if (time) {
         var date = new Date();
         date.setTime(date.getTime()+(time*24*60*60*1000));
         var expires = "; expires="+date.toGMTString();
     }
     else var expires = "";
     document.cookie = key+"="+value+expires+"; path=/";
   },
   erase : function(key){
     this.create(key,"",-1);
   },
   read : function(key){
     var keyX = key + "=";
     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(keyX) == 0) return   c.substring(keyX.length,c.length);
     }
     return null;
   }
}

Menyimpan array dan objek dengan json atau xml

Kelk
sumber