नाम से कुकी प्राप्त करें


362

मेरे पास कुकी से मूल्य प्राप्त करने के लिए एक गटर है।

अब मेरे पास नाम shares=और नाम से 2 कुकीज़ हैं obligations=

मैं इस कुकी को केवल दायित्वों कुकी से मान प्राप्त करना चाहता हूं।

मैं यह कैसे करु? इसलिए forडेटा को अलग-अलग मानों में विभाजित करता है और इसे एक सरणी में रखता है।

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

वहाँ कुछ राल है न सिर्फ यह एक सरणी बना रही है?
webLacky3rdClass

कुकी को एक सरणी बनाते हुए मुझे कहना चाहिए।
webLacky3rdClass

नहीं, मैं ऐसा कैसे कर सकता था?


आप एक उत्तर स्वीकार करना चाह सकते हैं: आप सवाल अभी भी अनुत्तरित के रूप में टैग किया गया है।
सोइल - मैथ्यू प्रिवोट

जवाबों:


499

एक दृष्टिकोण, जो एक सरणी पर चलने से बचा जाता है, यह होगा:

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

पूर्वाभ्यास

टोकन द्वारा एक स्ट्रिंग को विभाजित करने से या तो उत्पादन होगा, एक स्ट्रिंग (एक ही मूल्य) के साथ एक सरणी, अगर एक स्ट्रिंग में मौजूद नहीं है, या दो तारों के साथ एक सरणी, अगर एक स्ट्रिंग में पाया जाता है।

पहला (बायाँ) तत्व, टोकन से पहले का स्ट्रिंग है और दूसरा (राइट) वह है जो टोकन के बाद का स्ट्रिंग है।

(नोट: यदि स्ट्रिंग एक टोकन से शुरू होती है, तो पहला तत्व एक खाली स्ट्रिंग है)

यह देखते हुए कि कुकीज़ निम्नानुसार संग्रहीत हैं:

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

विशिष्ट कुकी मान को पुनः प्राप्त करने के लिए, हमें केवल "; {नाम} =" और अगले ";" से पहले स्ट्रिंग प्राप्त करने की आवश्यकता है। इससे पहले कि हम कोई प्रसंस्करण करते हैं, हम कुकीज़ स्ट्रिंग को ";" के साथ जोड़ते हैं, ताकि पहले वाले सहित प्रत्येक कुकी का नाम ";" और "=" के साथ संलग्न हो;

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

अब, हम पहले "; {नाम} =" से विभाजित कर सकते हैं, और अगर एक कुकी स्ट्रिंग में टोकन पाया जाता है (यानी हमारे पास दो तत्व हैं), तो हम दूसरे तत्व को एक स्ट्रिंग के साथ समाप्त करेंगे जो हमारे कुकी मान से शुरू होता है। फिर हम एक सरणी (यानी पॉप) से बाहर खींचते हैं, और उसी प्रक्रिया को दोहराते हैं, लेकिन अब ";" टोकन के रूप में, लेकिन इस बार वास्तविक टोकन मूल्य प्राप्त करने के लिए बाईं स्ट्रिंग (यानी शिफ्ट) को बाहर खींच रहा है।


13
@ user3132564 ने इसे संपादित करने की कोशिश की, लेकिन इसका वास्तव में एक टिप्पणी है: जब आप कुकी का प्रत्यय खोजते हैं तो यह विधि गलत मान देती है - यदि डॉक्यूमेंट.कॉकी का मूल्य "FirstName = John" है और आप getbookie कहते हैं ("नाम" "), आपको" जॉन "वापस मिल जाएगा, भले ही उस नाम से कोई कुकी न हो। यह भी काम नहीं करता है अगर एक कुकी का नाम दूसरे का प्रत्यय है - अगर document.cookie "Name = John है? LastName = Doe", कॉलिंग स्प्लिट ("नाम =") तीन स्ट्रिंग्स के साथ एक सरणी देता है और विधि doesn ' t getCookie ("नाम") के लिए सही मान लौटाएं।
डेनिस जहरुद्दीन

20
इस उत्तर में कार्यान्वयन के बारे में चेतावनी: यदि एक ही नाम से एक से अधिक कुकी हैं तो कोई कुकी मान वापस नहीं किया जाएगा। उदाहरण के लिए, अगर डोमेन .stackexchange.com के साथ-साथ programmers.stackexchange.com के लिए स्टैकटॉकेन नामक कुकी सेट है, तो यदि आप getCookie ("stackToken") को कॉल करते हैं, तो न तो मान लौटाया जाएगा - parts.length 2 से अधिक होगी। यदि आप एक ही नाम (लेकिन अलग डोमेन और पथ) के लिए सभी कुकी मान जानते हैं, तो यहां स्वीकृत उत्तर देखें: stackoverflow.com/questions/5639346/…
jlpp

7
@ डेनिसजेरुद्दीन - लगता है कि प्रत्यय मुद्दा तय हो गया था।
नाथन जेबी

2
@ नथानज.ब्राउर तुम सही हो। उस मुद्दे को संबोधित करने के लिए अपडेट किया गया था, लेकिन टिप्पणी के बजाय केवल चैंज में नोट किया।
किर्लीच

इसमें दोष है। यदि कुकी "नाम" और किसी अन्य नाम की तरह रेखांकित की जाती है, तो IE 10+भी एक त्रुटि होती है। उदाहरण के लिए: "user": "Joe", "user_name":"Doe"
बीओजेड

176

मैं कुकी पर एक एकल नियमित अभिव्यक्ति मैच का उपयोग करना पसंद करूंगा:

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

या इसके अलावा, हम एक फ़ंक्शन के रूप में उपयोग करने में सक्षम हैं, नीचे दिए गए कोड की जांच करें।

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

टिप्पणियों में स्कॉट जुंगविर्थ के लिए बेहतर धन्यवाद।


11
यदि दो कुकीज़ में एक ही प्रत्यय हो, तो यह गलत मिलान हो सकता है। यह दोनों xyz=valueऔर abcxyz=valueकब से मेल खाएगा name = xyz
ब्रेंट वॉशबर्न

3
unescape((document.cookie.match(key + '=([^;].+?)(;|$)') || [])[1] || '');ग्लिज़ / डोम / कुकीज
वैलेंटाइन

19
new RegExp('(^| )' + name + '=([^;]+)')@BrentWashburne द्वारा उठाए गए मुद्दे से बचने के लिए Regex को अपडेट करें । इसके अलावा, मैं इस के लिए एक jsperf परीक्षण और उच्चतम वोटों के साथ जवाब दिया, यह एक थोड़ा ऊपर बाहर आता है, लेकिन निश्चित रूप से कम कोड और आसान का पालन करने के लिए है: jsperf.com/simple-get-cookie-by-name
स्कॉट Jungwirth

5
@ScottJungwirth हाँ, लेकिन फिर आपको मैच को वापस करने के लिए रिटर्न स्टेटमेंट अपडेट करना चाहिए [2];
जो

@ScottJungwirth क्यों नहीं new RegExp('(^|;)' + name + '=([^;]+)')? nameएक पंक्ति या अर्धविराम, क्यों एक अंतरिक्ष `` की शुरुआत के पीछे?
ज्यूलिन

89

स्क्रिप्ट प्राप्त करने में कुकी का उपयोग करें:

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

फिर इसे कॉल करें:

var value = readCookie('obligations');

मैंने quirksmode कुकीज़ पृष्ठ से ऊपर का कोड चुरा लिया है। आपको इसे पढ़ना चाहिए


7
... जो W3schools से कोड चुराता है। वाह। w3schools.com/js/js_cookies.asp
WillWam

अरे, कम से कम मैंने श्रेय दिया: पी भी आप कैसे जानते हैं कि एक मूल था?
मकोरिया

यह आम तौर पर यह मान लेना सुरक्षित है कि W3S ने इसे पहले रखा था। वे बहुत सारे newbies का घर हैं जो ctrl-c कोड।
विल्वम

वास्तव में ऐसा लगता है कि यह चारों ओर का दूसरा तरीका है :) Quirksmode ब्राउज़र quirks के लिए एक शानदार साइट है और वहाँ एक स्रोत भी है। scottandrew.com
sunn0

मैं w3schools प्यार करता हूँ। शायद वरिष्ठ नागरिकों के लिए सबसे अच्छा मंच
राल्फ डिंगस

56

यदि आप jQuery का उपयोग करते हैं तो मैं आपको इस प्लगइन का उपयोग करने की सलाह देता हूं:

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

तो आप इस तरह से कुकी पढ़ सकते हैं:

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

इसके अलावा आप कुकी लिख सकते हैं:

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

कुकी हटाएं:

$.removeCookie('obligations');

1
यकीन नहीं है कि यह वास्तव में सबसे अच्छा जवाब क्यों नहीं दिया गया है। हाँ इसके jQuery और जावास्क्रिप्ट नहीं है, लेकिन एक ही समय में यह है !!!!
कोझीबी

21
@Cozzbie शायद एक कुकी को प्राप्त करने के लिए एक बाहरी पुस्तकालय (जिसमें एक और http अनुरोध जोड़ रहा है) को शामिल करना एक अनावश्यक ओवरकिल की तरह है।
राऊलसेवर

मुझे "$ .cookie" में "अनक्रेडेड रेफ़रेंस: $ परिभाषित नहीं किया गया है" एक त्रुटि मिल रही है। हालांकि मैंने jquery.min.js और इस उत्तर में सुझाए गए पुस्तकालय जैसे सभी आवश्यक पुस्तकालयों को शामिल किया।
आदर्श सिंह

44

कुछ अन्य उत्तरों में विधियाँ जो नियमित अभिव्यक्ति का उपयोग करती हैं, सभी मामलों को कवर नहीं करती हैं, विशेष रूप से:

  1. जब कुकी अंतिम कुकी है। इस मामले में कुकी मूल्य के बाद अर्धविराम नहीं होगा।
  2. जब एक और कुकी का नाम समाप्त होता है तो नाम देखा जाता है। उदाहरण के लिए, आप "एक" नाम के कुकी की तलाश कर रहे हैं, और "किया" नाम का एक कुकी है।
  3. जब कुकी के नाम में ऐसे अक्षर शामिल होते हैं जिनकी व्याख्या तब नहीं की जाती है जब वे एक नियमित अभिव्यक्ति में उपयोग किए जाते हैं जब तक कि वे बैकस्लैश से पहले न हों।

निम्नलिखित विधि इन मामलों को संभालती है:

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

nullयदि कुकी नहीं मिली है तो यह वापस आ जाएगी । यदि कुकी का मान खाली है तो यह एक रिक्त स्ट्रिंग लौटाएगा।

टिप्पणियाँ:

  1. यह फ़ंक्शन मानता है कि कुकी नाम संवेदनशील हैं
  2. document.cookie- जब यह एक असाइनमेंट के दाईं ओर दिखाई देता है, तो यह एक स्ट्रिंग का प्रतिनिधित्व करता है जिसमें कुकीज़ की अर्धविराम से अलग की गई सूची होती है, जो बदले में name=valueजोड़े होते हैं । प्रत्येक अर्धविराम के बाद एक एकल स्थान प्रतीत होता है।
  3. String.prototype.match()- nullकोई मैच नहीं मिलने पर वापस लौटता है। एक मिलान मिलने पर एक सरणी देता है, और सूचकांक में तत्व [1]पहले मिलान समूह का मूल्य है।

नियमित अभिव्यक्ति नोट्स:

  1. (?:xxxx) - एक गैर-मिलान समूह बनाता है।
  2. ^ - स्ट्रिंग की शुरुआत से मेल खाता है।
  3. | - समूह के लिए वैकल्पिक पैटर्न को अलग करता है।
  4. ;\\s* - एक अर्ध-बृहदान्त्र के बाद शून्य या अधिक व्हाट्सएप वर्णों से मेल खाता है।
  5. = - एक बराबर चिह्न से मेल खाता है।
  6. (xxxx) - एक मिलान समूह बनाता है।
  7. [^;]*- अर्ध-बृहदान्त्र के अलावा शून्य या अधिक वर्णों से मेल खाता है। इसका मतलब है कि यह वर्णों से मेल खाएगा, लेकिन शामिल नहीं है, एक अर्ध-बृहदान्त्र या स्ट्रिंग के अंत तक।

4
यह उत्तर सबसे अच्छा और सबसे छोटा फ़ंक्शन है जो झूठे मैचों के बिना सभी मामलों में काम करता है। यह कैसे काम करता है इसका सबसे अच्छा विवरण भी है। हालांकि, एस्केप फंक्शन की व्याख्या नहीं की गई है और मुझे लगता है कि अगर लेखक ने कुकी बनाई तो उसे पता चल जाएगा कि नाम से बचने की जरूरत है या नहीं। इसलिए मैं इसके बजाय एक छोटा कार्य देखना चाहूंगा:function getCookie(name) { var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null; }
जेफ बेकर

यदि यह एक जेनेरिक टूल है, तो इसे या तो नाम से बचना चाहिए या एक त्रुटि फेंकनी चाहिए यदि नाम को सीधे regex में एम्बेड नहीं किया जा सकता है। जो लोग अपने आवेदन की बाधाओं को जानते हैं वे पलायन या गार्ड को हटा सकते हैं।
जो लेप

31

4 साल बाद ईएस 6 सरल संस्करण।

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

मैंने इसे एक वस्तु के रूप में उपयोग करने के लिए एक जिस्ट भी बनाया है Cookie। जैसे, Cookie.set(name,value)औरCookie.get(name)

यह स्कैन के बजाय सभी कुकीज़ को पढ़ता है। यह छोटी संख्या में कुकीज़ के लिए ठीक है।


23

मैंने जोनाथन द्वारा प्रदान किए गए फ़ंक्शन को संशोधित किया है, नियमित अभिव्यक्ति का उपयोग करके आप इसके नाम से कुकी मूल्य प्राप्त कर सकते हैं:

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
}

यदि यह खाली स्ट्रिंग देता है तो इसका मतलब है कि कुकी मौजूद है, लेकिन इसका कोई मूल्य नहीं है, अगर यह गलत है तो कुकी मौजूद नहीं है। आशा है कि ये आपकी मदद करेगा।


बस जिज्ञासु, आपने varलाइन 3 पर उपयोग क्यों नहीं किया ? matched = ...
विक्टोरियो बेर्रा

इसके बारे में क्षमा करें, इसे लिखना भूल गए।
मोहिद्दीन अलाउद्दीन

14

यहाँ एक बाहरी लाइनर की आवश्यकता के बिना एक विशिष्ट नाम के साथ कुकी प्राप्त करने के लिए एक लाइनर है:

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

यह उत्तर किर्लिच के शानदार समाधान पर आधारित है । इस समाधान का एकमात्र समझौता यह है, कि जब कुकी मौजूद नहीं होगी, तो आपको एक खाली स्ट्रिंग मिलेगा। ज्यादातर मामलों में यह एक सौदा ब्रेकर नहीं होना चाहिए, हालांकि।


10

मुझे पता है कि यह एक पुराना सवाल है लेकिन मुझे इस समस्या का भी सामना करना पड़ा। सिर्फ रिकॉर्ड के लिए, डेवलपर्स मोज़िला वेब पेज में थोड़ा एपीआई है

Yoy केवल JS का उपयोग करके किसी भी कुकी को प्राप्त कर सकता है। कोड भी IMHO क्लीनर है (लंबी लाइन को छोड़कर, मुझे यकीन है कि आप आसानी से ठीक कर सकते हैं)।

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

जैसा कि टिप्पणियों में कहा गया है कि यह विधि मानती है कि कुंजी और मान एन्कोडर्कोम्पोनेंट () का उपयोग करके एन्कोड किए गए थे। यदि कुकी की कुंजी और मान एनकोडेड नहीं थे, तो डीकोड और एनकोडाउरीकोम्पोनेंट () निकालें।


1
बस इस बात से अवगत रहें कि कुकी के नाम का तरीका मान लिया गया है और encodeURIComponent()कुकी के सेट होने पर उपयोग करके मूल्य दोनों को एन्कोड किया गया था, जो कि कुकी को सेट करने के लिए साथी फ़ंक्शन का उपयोग करने पर सही होगा, लेकिन हमेशा ऐसा नहीं हो सकता है। परीक्षण
जॉन एस

@ जॉन्स हम अभी डिकोड्यूरिकम्पोनेंट को हटा सकते हैं, है ना? (अगर हम इसे कुकी सेट करने के लिए उपयोग नहीं करते?) क्या यह अभी भी काम करेगा?
NiCk Newman

हां, बस डिकोड्यूरी को हटा दिया और यह रेगेक्सप एक राक्षस है। धन्यवाद मार्क, मतदान!
नीक न्यूमैन

10

आप जेएस-कुकी का उपयोग कर सकते हैंजावास्क्रिप्ट कुकीज़ प्राप्त करने और सेट करने के लिए लाइब्रेरी का ।

अपने HTML में शामिल करें:

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

कुकी बनाने के लिए:

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

एक कुकी पढ़ने के लिए:

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

8

यहाँ एक बहुत छोटा संस्करण है

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

ध्यान दें कि मैंने रेगेक्स एक्सप्रेशन को रचने के लिए ES6 के टेम्पलेट स्ट्रिंग्स का उपयोग किया है।


2
अब से सबसे अच्छा जवाब। ES6 सुविधाओं का उपयोग करता है। यह 2017 है और लोग अभी भी उपयोग करते हुए var, +CONCATENATE करने, आदि -.- '
इलियास सोरेस

@EliasSoares उपयोग की समस्या क्या है var?
मृगया अष्ट


कोई समस्या नहीं है, लेकिन लेट का उपयोग करना एक अच्छा अभ्यास है क्योंकि इसमें कई स्थितियों में फायदे हैं, और लगभग कोई नुकसान नहीं है
एलियास सोरेस

7

उपयोग object.defineProperty

इससे आप आसानी से कुकीज एक्सेस कर सकते हैं

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

अब से आप बस कर सकते हैं:

alert( Cookies.obligations );

यह स्वचालित रूप से भी अपडेट हो जाएगा, इसलिए यदि आप एक कुकी बदलते हैं, तो Cookiesभी बदल जाएगा।


2
उत्तम! सिवाय इसके कि यह उन वस्तुओं के लिए काम नहीं करेगा जिनमें कुछ अक्षर हैं जैसे डैश (कुकी नाम), और विभाजन करते समय, वस्तुओं में पहले से खाली जगह होती है इसलिए मैं जाता हूं cookies[(cookie.split("=")[0]).replace(/ /g,'')] = ..। धन्यवाद!!
शमूएल एल्ह

@ शमूएल एल्ह सही है, लेकिन आप भी प्रतिस्थापित (/ / g, '') के बजाय .trim () का उपयोग कर सकते हैं
mtizziani

7

kirlich ने एक अच्छा समाधान दिया। हालांकि, यह विफल रहता है जब समान नामों के साथ दो कुकी मान होते हैं, तो इस स्थिति के लिए एक सरल समाधान यहां दिया गया है:

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

6

हमेशा अच्छा काम करता है:

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

JQuery या कुछ भी के लिए कोई आवश्यकता नहीं है। शुद्ध पुराना अच्छा जावास्क्रिप्ट।


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

6

कुकी नाम के साथ कुकी प्राप्त करने का सरल कार्य:

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

6

जाहिरा तौर पर MDN शब्द-सीमा regex वर्ण वर्ग के बारे में कभी नहीं सुना है \b, जो \w+कि सन्निहित से मेल खाता है जो किसी भी पक्ष के साथ जुड़ा हुआ है \W+:

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

var obligations = getCookie('obligations');

5

ऐसा लगता है कि आप कुकी की-वैल्यू जोड़ियों को एक सरणी में विभाजित कर सकते हैं और उस पर अपनी खोज को आधार बना सकते हैं:

var obligations = getCookieData("obligations");

जो निम्नलिखित चलाता है:

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

फिडल: http://jsfiddle.net/qFmPc/

या संभवतः निम्नलिखित भी:

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

1
वहाँ एक तरीका है document.cookie.indexOf (नाम) का उपयोग करें और तुलना करने के लिए?

@AndrejHefner आप, हालांकि यह सबस्ट्रिंग से मेल खाएगा। इसलिए यदि आपके पास कुकी नाम "फोब्बर" है, और "बार" नाम है, तो आपको कुंजी "बार" के साथ "बार" में "बार" भ्रमित कर सकता है।
सैम्पसन

@AndrejHefner कृपया बाद की विधि देखें, जो तेज़ होनी चाहिए, क्योंकि यह एक मैच के लिए स्ट्रिंग की जांच करती है।
सैम्पसन

1
दूसरी विधि में एक बग होता है जिसमें इसे अंतिम कुकी मान नहीं मिलेगा क्योंकि यह हमेशा एक दिखता है; अतं मै। एक सुधार संस्करण होगा:function getCookieData( name ) { var patrn = new RegExp( "(?:^| )" + name + "=(.*?)(?:;|$)" ); if ( match = (document.cookie.match(patrn) )) return match[1]; return false; }
ओज सुलैमान

5

अपनी परियोजनाओं में मैं नाम से कुकीज़ तक पहुंचने के लिए निम्नलिखित फ़ंक्शन का उपयोग करता हूं

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

4

यदि आपको यह जांचने की आवश्यकता है कि क्या कुछ कुकी मौजूद हैं, तो यह आसान है:

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

अगर कुकी लॉग किया गया है = सही मौजूद है, तो आपको 2 मिलेगा, यदि 1 नहीं।

log = true - इसे आप कुकी नाम = मान, या सिर्फ एक नाम में बदल दें


1
.indexOf() >= 0इसके बजाय उपयोग करने के लिए यह अधिक पठनीय नहीं होगा ?
विक सीडब्युय्यू

3

कुकी प्राप्त करने के लिए यहाँ पहले से ही अच्छे उत्तर हैं, हालाँकि यहाँ मेरा अपना समाधान है:

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

उपयोग: `

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

3

जावास्क्रिप्ट द्वारा निर्धारित

document.cookie = 'cookiename=tesing';

jquery- कुकी प्लगइन के साथ jquery द्वारा प्राप्त करें

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

alert(value);

@cytsunny - इसका कारण यह है कि आपके पास इसका उपयोग करने के लिए jquery कुकी प्लगइन होना चाहिए।
एलेक्स स्टैंडिफोर्ड

वाह .... क्या एक महत्वपूर्ण जानकारी पहले याद आ रही है .... लेकिन आपके द्वारा दिए गए लिंक से, ऐसा लगता है कि पुस्तकालय के मालिक ने फैसला किया कि वे बेहतर ढंग से jquery निर्भरता को दूर करते हैं।
सायट्सनी


2

मेरा समाधान यह है:

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

यह फ़ंक्शन Underscorejs _.find-function का उपयोग करता है। कुकी नाम मौजूद नहीं है, तो अपरिभाषित देता है


2

मैंने इसे इस तरह से किया है। ताकि मुझे मूल्यों को अलग करने के लिए उपयोग करने के लिए एक वस्तु मिल जाए। यह यू माता-पिता के लिए कुकी को पास कर सकता है और फिर आप अपने मूल्यों को कुंजी द्वारा एक्सेस कर सकते हैं जैसे

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

1

मौजूदा कुकीज़ को खोजने के लिए एक कार्यात्मक दृष्टिकोण। यह एक सरणी देता है, इसलिए यह एक ही नाम की कई घटनाओं का समर्थन करता है। यह आंशिक कुंजी मिलान का समर्थन नहीं करता है, लेकिन यह 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);
    });
}

1

बस निम्नलिखित फ़ंक्शन (एक शुद्ध जावास्क्रिप्ट कोड) का उपयोग करें

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

1

नाम से कुकी प्राप्त करें बस कुकी के नाम को नीचे फ़ंक्शन में पास करें

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

0

निम्नलिखित फ़ंक्शन key-valueआवश्यक कुकी की एक जोड़ी लौटाएगा , जहां keyकुकी नाम है और कुकी valueका मूल्य होगा।

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

0

कुकीज़ उदाहरण: उदाहरण 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;
   }
}

स्टोर एरेज़ और ऑब्जेक्ट्स को json या xml के साथ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.