जावास्क्रिप्ट में नाम से कुकी पढ़ने के लिए सबसे छोटा कार्य क्या है?


194

जावास्क्रिप्ट में कुकी पढ़ने के लिए सबसे छोटा, सटीक और क्रॉस-ब्राउज़र संगत तरीका क्या है?

बहुत बार, स्टैंड-अलोन स्क्रिप्ट का निर्माण करते समय (जहां मेरे पास कोई बाहरी निर्भरता नहीं हो सकती है), मैं खुद को कुकीज़ पढ़ने के लिए एक फ़ंक्शन जोड़कर पाता हूं, और आमतौर पर QuirksMode.orgreadCookie() विधि (280 बाइट्स, 216 मिनीफ़ाइड) पर वापस आ जाता हूं ।)

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

यह काम करता है, लेकिन इसकी बदसूरत है, और हर बार काफी ब्लोट जोड़ता है।

विधि जो jQuery.cookie कुछ इस तरह का उपयोग करती है (संशोधित, 165 बाइट्स, 125 न्यूनतम):

function read_cookie(key)
{
    var result;
    return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? (result[1]) : null;
}

ध्यान दें कि यह एक 'कोड गोल्फ' प्रतियोगिता नहीं है: मैं अपने readCookie फ़ंक्शन के आकार को कम करने के लिए वैध रूप से इच्छुक हूं, और मेरे पास जो समाधान है वह सुनिश्चित करने के लिए मान्य है।


8
संग्रहीत कुकी डेटा बदसूरत है, इसलिए उन्हें संभालने के लिए कोई भी विधि संभवतः भी होगी।
एमवीसीएचआर

4
@ एमवीसीएचआर गंभीरता से किस बिंदु पर यह निर्णय लिया गया कि कुकीज़ को अर्ध-बृहदान्त्र सीमांकित स्ट्रिंग से एक्सेस किया जाना चाहिए? वह कब एक अच्छा विचार था?
येलहेल

7
यह प्रश्न अभी भी क्यों खुला है और इसमें एक इनाम क्यों है? क्या आप वाकई 5 बाइट्स बचाने के लिए बेताब हैं ???
मार्क कान

cookieArr = document.cookie.split (';'); मैप (ck => {return {[ck.split ('=') [0] .trim ()]: ck.split ('=')] [1]। }})
vladimir.gorea

जवाबों:


197

वर्तमान सर्वोत्तम मतदान के मुकाबले कम विश्वसनीय, अधिक विश्वसनीय और अधिक आकर्षक:

function getCookieValue(a) {
    var b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)');
    return b ? b.pop() : '';
}

विभिन्न दृष्टिकोणों की तुलना का प्रदर्शन यहां दिखाया गया है:

http://jsperf.com/get-cookie-value-regex-vs-array-functions

दृष्टिकोण पर कुछ नोट्स:

रेगेक्स दृष्टिकोण न केवल सबसे ब्राउज़रों में सबसे तेज़ है, यह सबसे कम फ़ंक्शन के साथ-साथ पैदावार भी देता है। इसके अतिरिक्त यह बताया जाना चाहिए कि आधिकारिक युक्ति (RFC 2109) के अनुसार , अर्धविराम के बाद का स्थान जो दस्तावेज़ में कुकीज़ को अलग करता है। कुकी वैकल्पिक है और एक तर्क दिया जा सकता है कि इस पर भरोसा नहीं किया जाना चाहिए। इसके अलावा, व्हाट्सएप को बराबरी के चिन्ह (=) से पहले और बाद में अनुमति दी जाती है और एक तर्क दिया जा सकता है कि इस संभावित व्हाट्सएप को किसी भी विश्वसनीय दस्तावेज में देखा जाना चाहिए। उपरोक्त व्हॉट्सएप की दोनों स्थितियों के लिए रेगेक्स उपरोक्त हैं।


4
मैंने अभी देखा है कि फ़ायरफ़ॉक्स में, मैंने जो ऊपर पोस्ट किया है, वह रेग्क्स दृष्टिकोण, लूपिंग दृष्टिकोण के रूप में अच्छा नहीं है। पहले जो परीक्षण मैंने चलाए थे, वे क्रोम में किए गए थे, जहां रेगेक्स दृष्टिकोण ने अन्य तरीकों की तुलना में मामूली बेहतर प्रदर्शन किया था। बहरहाल, यह अभी भी सबसे छोटा है जो पूछे जाने वाले प्रश्न को संबोधित करता है।
मैक

6
getCookieValue(a, b)पैरामीटर क्यों लेता है b?
ब्रेंट वाशबर्न

15
Upvoted, लेकिन पठनीयता के लिए नहीं ... मुझे यह पता लगाने में थोड़ा समय लगा कि क्या aऔर क्या bकरना है।
गिगी

9
चतुर, लेकिन मूर्खता से इसे लिखने के लिए 1 बाइट बचाने के लिए।
मफिन मैन

5
aपैरामीटर regex बच नहीं है, जबकि यह उपयोगी हो सकता है, यह सुरक्षित नहीं है। चीजों की तरह getCookieValue('.*')किसी भी यादृच्छिक कुकी वापस आ जाएगी
Vitim.us

185

यह केवल कभी भी दस्तावेज़ को ले जाएगा। एक बार। प्रत्येक बाद का अनुरोध तत्काल होगा।

(function(){
    var cookies;

    function readCookie(name,c,C,i){
        if(cookies){ return cookies[name]; }

        c = document.cookie.split('; ');
        cookies = {};

        for(i=c.length-1; i>=0; i--){
           C = c[i].split('=');
           cookies[C[0]] = C[1];
        }

        return cookies[name];
    }

    window.readCookie = readCookie; // or expose it however you want
})();

मुझे डर है कि वास्तव में इस सामान्य तर्क की तुलना में तेज़ तरीका नहीं है जब तक कि आप उपयोग करने के लिए स्वतंत्र न हों .forEach जो ब्राउज़र पर निर्भर है (फिर भी आप उस बचत नहीं कर रहे हैं)

आपका अपना उदाहरण थोड़ा संकुचित 120 bytes:

function read_cookie(k,r){return(r=RegExp('(^|; )'+encodeURIComponent(k)+'=([^;]*)').exec(document.cookie))?r[2]:null;}

आप इसे प्राप्त कर सकते हैं 110 bytesयदि आप इसे 1-अक्षर फ़ंक्शन नाम बनाते हैं, 90 bytesयदि आप ड्रॉप करते हैं encodeURIComponent

मैंने इसे नीचे कर दिया है 73 bytes, लेकिन निष्पक्ष होने के लिए 82 bytesजब इसका नाम रखा गया है readCookieऔर 102 bytesजब जोड़ रहा है encodeURIComponent:

function C(k){return(document.cookie.match('(^|; )'+k+'=([^;]*)')||0)[2]}

मैं वापसी के बयान को भूल गया, बंद होने के साथ कुछ भी गलत नहीं है, शीश।
मार्क कहन

3
...क्या? तुमने कहा था कि अंतर है। d.pr/sSte() में अंत में कॉल नहीं था , इसलिए यह एक अनाम फ़ंक्शन को परिभाषित कर रहा था, लेकिन कभी भी इसे निष्पादित नहीं कर रहा था।
येलहेल

2
यहाँ आप जाते हैं: jsperf.com/pre-increment-vs-post-increment मैं सही था, ++ मैं तेज है, कम से कम यदि आपको पहले और बाद में मान मिलता है। और यही आप लूप के लिए करते हैं।
xavierm02

1
एक महत्वपूर्ण बात: चूँकि "कुकीज़" का मूल्य समाप्त हो गया है, नई कुकीज़ या अन्य विंडो या टैब से परिवर्तित कुकीज़ दिखाई नहीं देंगी। आप इस मुद्दे को एक चर में document.cookie से स्ट्रिंग-मान को संग्रहीत करके इस समस्या से बच सकते हैं और जांचें कि क्या यह प्रत्येक एक्सेस पर अपरिवर्तित है।
एंड्रियास

2
@StijndeWitt - यह कैसे करता है नहीं इस सवाल का जवाब? 73 बाइट्स आपके लिए पर्याप्त नहीं है? :) मेरे पास आखिरी उत्तर कुछ व्हाट्सएप चेक के अलावा, नीचे दिए गए एक के समान है, lol
मार्क कहन

20

मान्यताओं

प्रश्न के आधार पर, मेरा मानना ​​है कि इस समारोह के लिए कुछ धारणाएं / आवश्यकताएं शामिल हैं:

  • यह एक पुस्तकालय समारोह के रूप में इस्तेमाल किया जाएगा , और इसलिए किसी भी कोडबेस में गिरा दिया जाना चाहिए;
  • जैसे, इसे कई अलग-अलग वातावरणों में काम करने की आवश्यकता होगी , अर्थात विरासत जेएस कोड, गुणवत्ता के विभिन्न स्तरों आदि के सीएमएस;
  • अन्य लोगों द्वारा लिखे गए कोड और / या जिस कोड को आप नियंत्रित नहीं करते हैं, उसके साथ अंतर-संचालित करने के लिए, फ़ंक्शन को कुकी के नाम या मूल्यों को एन्कोडेड करने पर कोई अनुमान नहीं लगाना चाहिए । एक स्ट्रिंग के साथ फ़ंक्शन को कॉल करके "foo:bar[0]"एक कुकी (शाब्दिक रूप से) का नाम "फू: बार [0]" वापस करना चाहिए;
  • नए कुकी पृष्ठ के जीवनकाल के दौरान किसी भी बिंदु पर संशोधित और / या मौजूदा कुकीज़ को लिखा जा सकता है

इन मान्यताओं के तहत, यह स्पष्ट है कि encodeURIComponent/ का decodeURIComponent उपयोग नहीं किया जाना चाहिए ; ऐसा करने पर यह माना जाता है कि कुकी को सेट करने वाले कोड ने इन कार्यों का उपयोग करके इसे इनकोड भी किया।

यदि कुकी नाम में विशेष वर्ण हो सकते हैं, तो नियमित अभिव्यक्ति दृष्टिकोण समस्याग्रस्त हो जाता है। कुकी को संग्रहीत करते समय कुकी नाम (वास्तव में नाम और मूल्य दोनों) एन्कोडिंग द्वारा jQuery.cookie इस मुद्दे के आसपास काम करता है, और कुकी को पुनर्प्राप्त करते समय नाम को डिकोड करता है। एक नियमित अभिव्यक्ति समाधान नीचे है।

जब तक आप केवल उन कुकीज़document.cookie को नहीं पढ़ रहे हैं जिन्हें आप पूरी तरह से नियंत्रित करते हैं, तो सीधे कुकीज़ को पढ़ना उचित होगा और परिणामों को कैश नहीं करना चाहिए, क्योंकि यह जानने का कोई तरीका नहीं है कि कैश बिना पढ़े अमान्य है या नहींdocument.cookie फिर से ।

(जबकि एक्सेस और पार्सिंग document.cookiesकैश का उपयोग करने की तुलना में थोड़ा धीमा होगा, यह डोम के अन्य हिस्सों को पढ़ने के रूप में धीमा नहीं होगा, क्योंकि कुकीज़ डोम / रेंडर पेड़ों में भूमिका नहीं निभाते हैं।)


लूप-आधारित फ़ंक्शन

पीपीके के (लूप-आधारित) फ़ंक्शन के आधार पर यहां कोड गोल्फ उत्तर दिया गया है:

function readCookie(name) {
    name += '=';
    for (var ca = document.cookie.split(/;\s*/), i = ca.length - 1; i >= 0; i--)
        if (!ca[i].indexOf(name))
            return ca[i].replace(name, '');
}

जो कि जब छोटा किया जाता है, तो 128 अक्षर आते हैं (फ़ंक्शन नाम की गिनती नहीं):

function readCookie(n){n+='=';for(var a=document.cookie.split(/;\s*/),i=a.length-1;i>=0;i--)if(!a[i].indexOf(n))return a[i].replace(n,'');}

नियमित अभिव्यक्ति-आधारित कार्य

अद्यतन: यदि आप वास्तव में एक नियमित अभिव्यक्ति समाधान चाहते हैं:

function readCookie(name) {
    return (name = new RegExp('(?:^|;\\s*)' + ('' + name).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + '=([^;]*)').exec(document.cookie)) && name[1];
}

यह RegExp ऑब्जेक्ट के निर्माण से पहले कुकी नाम के किसी भी विशेष वर्ण से बच जाता है । न्यूनतम, यह 134 वर्णों तक आता है (फ़ंक्शन नाम की गिनती नहीं):

function readCookie(n){return(n=new RegExp('(?:^|;\\s*)'+(''+n).replace(/[-[\]{}()*+?.,\\^$|#\s]/g,'\\$&')+'=([^;]*)').exec(document.cookie))&&n[1];}

जैसा कि रूडू और कॉव्स ने टिप्पणियों में बताया है, नियमित-अभिव्यक्ति-बचने वाले रेगेक्स को कुछ पात्रों द्वारा छोटा किया जा सकता है। मुझे लगता है कि बचने वाले रेगेक्स को सुसंगत रखना अच्छा होगा (आप इसे कहीं और इस्तेमाल कर रहे होंगे), लेकिन उनके सुझाव विचार करने लायक हैं।


टिप्पणियाँ

ये दोनों फ़ंक्शन संभाल नहीं पाएंगे , nullया undefinedयदि कोई "null" नाम का कुकी है, readCookie(null)तो उसका मूल्य वापस कर देगा। यदि आपको इस मामले को संभालने की आवश्यकता है, तो तदनुसार कोड को अनुकूलित करें।


#\sआपके प्रतिस्थापन-रेगेक्स के अंत में क्या लाभ है ? उस सामान्य प्रतिस्थापन को थोड़ा और सरल बनाया जा सकता है (-, इसका कोई मतलब नहीं है (कोष्ठक में रहने वाले भाग को छोड़कर): /[[\]{}()*+?.\\^$|]/g यह इसके साथ भी सॉर्टर हो सकता है encodeURIComponent: /[()*.\\]/g
रुडू

@Rudu कि regex-भागने regex से आता है सिमोन विललिसन और भी द्वारा प्रयोग किया जाता है XRegExp पुस्तकालय। यह सामान्य मामले के लिए है (उदाहरण के लिए यदि आप कर रहे हैं new RegExp('[' + str + ']')तो आप बचना चाहते हैं -), तो आप शायद सही हैं कि इसे छोटा किया जा सकता है। चूंकि यह केवल कुछ बाइट्स को बचाएगा, और अतिरिक्त पात्रों से बचकर अंतिम रेगेक्स को प्रभावित नहीं करता है, मैं इसे छोड़ने के लिए इच्छुक हूं जैसा कि यह है।
जेफरी

@Rudu इसके अलावा मैं encodeURIComponent()इस मामले में बचना चाहूंगा क्योंकि मुझे लगता है कि ओपी एक सामान्य फ़ंक्शन की तलाश में है जो किसी भी कुकी नाम के साथ काम कर सकता है। यदि तृतीय-पक्ष कोड "फू: बार" नामक एक कुकी सेट करता है, encodeURIComponent()तो इसका मतलब होगा "फू 3 एबार" नामक कुकी को पढ़ने की कोशिश करना।
जेफरी

मुझे पता है कि कोड कहां से आता है - यह बिल्कुल सही नहीं है (यह चालू a<tab>bहो जाएगा a\<tab>b... जो एक वैध बच नहीं है, हालांकि \<space>है)। और लगता है कि जेएस रेगेक्स
रूडू

1
तीसरे भाग के बहुत सारे पुस्तकालय उपयोग करते हैं encodeURIComponent, अगर एक कुकी का नाम दिया गया था, तो foo=इसे foo%3Dउसी तरह संग्रहीत किया जाएगा जैसा कि नाम को एन्कोडिंग के बिना आप इसे नहीं पाएंगे (आपका कोड इसे नहीं मिलेगा) - कोई सही उत्तर नहीं है। यदि आप यह नियंत्रित कर सकते हैं कि कुकीज़ को कैसे रखा जाए, तो आप उत्तर को सरल बना सकते हैं / इसे बाहर निकालने में मदद करने के लिए अनुमान लगा सकते हैं। सबसे आसान / सबसे अच्छा है कि कुकी नाम के लिए केवल एक z-ZA-Z0-9 का उपयोग करें और पूरे encodeURIComponentऔर RegExp से बचने के लिए गड़बड़ न करें। लेकिन आपको अभी भी कुकी मूल्यdecodeURIComponent पर चिंता करने की आवश्यकता हो सकती है क्योंकि यह एक अनुशंसित अभ्यास है।
रूडू

14

गूगल एनालिटिक्स से कोड

function c(a){
    var d=[],
        e=document.cookie.split(";");
    a=RegExp("^\\s*"+a+"=\\s*(.*?)\\s*$");
    for(var b=0;b<e.length;b++){
        var f=e[b].match(a);
        f&&d.push(f[1])
    }
    return d
}

मैंने अंतिम पंक्ति को बदल दिया return d[0];और फिर मैंने if (c('EXAMPLE_CK') == null)यह जांचने के लिए उपयोग किया कि क्या कुकी परिभाषित नहीं है।
इलेक्ट्रोइड

9

इसके बारे में क्या खयाल है?

function getCookie(k){var v=document.cookie.match('(^|;) ?'+k+'=([^;]*)(;|$)');return v?v[2]:null}

फ़ंक्शन नाम के बिना 89 बाइट्स गिना।


चतुर उत्तर। मुद्दे पर। अधिक उत्थान का वर्णन करता है। स्पष्टता के लिए kनाम दिया जा सकता हैkey , लेकिन वैसे भी।
गेरोल्डब्रोज़ ने मोनिका

धन्यवाद :-) अब तक, स्वीकृत उत्तर अपडेट किया गया था और इसमें एक भी शामिल है। लेकिन केवल 73 अक्षरों के साथ थोड़ा और अधिक संकुचित रूप में।
साइमन स्टाइनबर्गर

इसलिए, आप लघुता का लक्ष्य बना रहे हैं, मैं देख रहा हूं। आपकी साइट सूची पर अभी तक पहेलियाँ और कोड गोल्फ प्रोग्रामिंग क्यों नहीं है ... अभी तक? मज़े करो! और, BTW, मैं एक पर्वतारोही भी हूँ। बर्ग हील! ;)
गेरोल्डब्रोज़र मोनिका

4

यहाँ जाता है .. चीयर्स!

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

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


3

यह एक ऐसी वस्तु है जिसमें आप कुकीज़ पढ़ सकते हैं, लिख सकते हैं, ओवरराइट कर सकते हैं और हटा सकते हैं।

var cookie = {
    write : function (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;
    },
    read : function (name) {
        if (document.cookie.indexOf(name) > -1) {
            return document.cookie.split(name)[1].split("; ")[0].substr(1)
        } else {
            return "";
        }
    },
    delete : function (cname) {
        var d = new Date();
        d.setTime(d.getTime() - 1000);
        var expires = "expires="+d.toUTCString();
        document.cookie = cname + "=; " + expires;
    }
};

1

कुकी पढ़ने के मामले में ये दोनों कार्य समान रूप से मान्य हैं। यद्यपि आप कुछ बाइट्स से दाढ़ी बना सकते हैं (और यह वास्तव में यहाँ कोड गोल्फ क्षेत्र में हो रहा है):

function readCookie(name) {
    var nameEQ = name + "=", ca = document.cookie.split(';'), i = 0, c;
    for(;i < ca.length;i++) {
        c = ca[i];
        while (c[0]==' ') c = c.substring(1);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length);
    }
    return null;
}

मैंने इसके साथ किया था सभी चर घोषणाओं को एक var स्टेटमेंट में ढहा दिया गया है, कॉल करने के लिए कॉल में अनावश्यक दूसरे तर्कों को हटा दिया है, और एक charAt कॉल को एक सरणी डेरेफेरेंस में बदल दिया है।

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

function read_cookie(key)
{
    var result;
    return (result = new RegExp('(^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? result[2] : null;
}

मैंने कैप्चरिंग सब-एक्सप्रेशन को रेगुलर एक्सप्रेशन में बदलने के लिए पहली सब-एक्सप्रेशन को बदल दिया और इस बदलाव के साथ मेल करने के लिए [1] पार्ट को परिणाम [2] में बदल दिया; परिणाम के आस-पास के अनावश्यक पार्न्स को भी हटा दिया [2]।


1

वास्तव में जितना संभव हो उतना ब्लोट को हटाने के लिए, एक रैपर फ़ंक्शन का उपयोग न करने पर विचार करें:

try {
    var myCookie = document.cookie.match('(^|;) *myCookie=([^;]*)')[2]
} catch (_) {
    // handle missing cookie
}

जब तक आप RegEx से परिचित हैं, तब तक यह कोड यथोचित स्वच्छ और पढ़ने में आसान है।


0

(संपादित करें: गलत संस्करण को पहले पोस्ट किया है .. और उस पर एक गैर-कार्यात्मक है। वर्तमान में अपडेट किया गया है, जो एक अनटुम फ़ंक्शन का उपयोग करता है जो दूसरे उदाहरण की तरह है।)

पहले उदाहरण में अच्छा विचार cwolves। मैंने कई सबडोमेन में काम करने वाले एक काफी कॉम्पैक्ट कुकी रीडिंग / राइटिंग फंक्शन के लिए दोनों का निर्माण किया। यह पता लगाने के लिए कि इस धागे के पार किसी और को चलाने के मामले में मैं साझा करूं।

(function(s){
  s.strToObj = function (x,splitter) {
    for ( var y = {},p,a = x.split (splitter),L = a.length;L;) {
      p = a[ --L].split ('=');
      y[p[0]] = p[1]
    }
    return y
  };
  s.rwCookie = function (n,v,e) {
    var d=document,
        c= s.cookies||s.strToObj(d.cookie,'; '),
        h=location.hostname,
        domain;
    if(v){
      domain = h.slice(h.lastIndexOf('.',(h.lastIndexOf('.')-1))+1);
      d.cookie = n + '=' + (c[n]=v) + (e ? '; expires=' + e : '') + '; domain=.' + domain + '; path=/'
    }
    return c[n]||c
  };
})(some_global_namespace)
  • यदि आप rwCookie को पास नहीं करते हैं, तो यह कुकी के भंडारण में सभी कुकीज़ प्राप्त करेगा
  • RwCookie को कुकी नाम से उत्तीर्ण करने पर, भंडारण से उस कुकी का मान मिलता है
  • एक कुकी मान पारित, यह कुकी लिखता है और भंडारण में मूल्य रखता है
  • जब तक आप एक निर्दिष्ट नहीं करते हैं, तब तक सत्र की समय सीमा समाप्त हो जाती है

0

Cwolves के उत्तर का उपयोग करना, लेकिन एक बंद का उपयोग न करना और न ही एक पूर्व-संकलित हैश:

// Golfed it a bit, too...
function readCookie(n){
  var c = document.cookie.split('; '),
      i = c.length,
      C;

  for(; i>0; i--){
     C = c[i].split('=');
     if(C[0] == n) return C[1];
  }
}

... और छोटा कर रहा है ...

function readCookie(n){var c=document.cookie.split('; '),i=c.length,C;for(;i>0;i--){C=c[i].split('=');if(C[0]==n)return C[1];}}

... 127 बाइट के बराबर है।


0

यहां जावास्क्रिप्ट स्ट्रिंग फ़ंक्शन का उपयोग करके सबसे सरल समाधान है।

document.cookie.substring(document.cookie.indexOf("COOKIE_NAME"), 
                          document.cookie.indexOf(";", 
                          document.cookie.indexOf("COOKIE_NAME"))).
  substr(COOKIE_NAME.length);

0

निम्न फ़ंक्शन रिक्त स्ट्रिंग्स और अपरिभाषित कुकीज़ के बीच अंतर करने की अनुमति देगा। अपरिभाषित कुकीज़ सही ढंग से वापस आएंगी undefinedऔर कुछ अन्य उत्तरों के विपरीत एक खाली स्ट्रिंग नहीं। लेकिन यह IE7 और उसके बाद के संस्करण पर काम नहीं करेगा, क्योंकि वे स्ट्रिंग इंडेक्स में ऐरे एक्सेस की अनुमति नहीं देते हैं।

    function getCookie(name) {
      return (document.cookie.match('(?:^|;) *'+name+'=([^;]*)')||"")[1];
    }

आप सूची में तीसरा आइटम क्यों लौटा रहे हैं?
nasch

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