दिलचस्प पोस्ट
React.js में ऑनक्लिक इवेंट बाइंडिंग क्या कोई कारण Image.FromFile एक आउटफाईमेरी अपवाद को एक अवैध छवि प्रारूप के लिए फेंकता है? दूसरे फ़ील्ड से समय के साथ एक फ़ील्ड से तारीख को गठबंधन कैसे करें – एमएस SQL ​​सर्वर varargs और '…' तर्क JUnit4 में विशिष्ट क्रम में परीक्षा के तरीकों को कैसे चलाने के लिए? लोड किए गए पुस्तकालय के साथ UUID बेमेल का पता चला स्लैश का उपयोग करें sed में बदलें मेरा बटन पाठ लॉलीपॉप पर सभी कैप्स के लिए क्यों मजबूर है? कई टेबलों को एक टेबल में कई टेबलों में परिभाषित करना सैक पार्सर का उपयोग करके एक्सएमएल को कैसे पार्स करना है I एआरसी में पॉइंट-टू-पॉइंटर स्वामित्व के मुद्दों को संभालना सी में scanf के साथ इनपुट पार्सिंग आगे का उपयोग करने के फायदे Ggplot2 में रंग भरने के लिए बनावट कैसे जोड़ें? अग्रभूमि आईओएस में ऐप करते समय पुश सूचना प्राप्त करें

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

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

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

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

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

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

वेब के समाधान से एकत्रित समाधान "नाम से कुकी प्राप्त करें"

एक तरीका है, जो एक सरणी पर चलने से बचा जाता है, यह होगा:

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

पूर्वाभ्यास

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

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

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

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

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

विशिष्ट कुकी मूल्य को पुनः प्राप्त करने के लिए, हमें "" {name} = "और उसके पहले" "के बाद स्ट्रिंग प्राप्त करने की आवश्यकता है; किसी भी प्रोसेसिंग से पहले, हम कुकी स्ट्रिंग को ";" के साथ आरंभ करते हैं, ताकि पहले कुकी सहित प्रत्येक कुकी नाम ";" और "=" के साथ संलग्न हो:

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

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

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

 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 कुकीज़ पेज चुरा लिया आपको इसे पढ़ना चाहिए

मैं कुकी पर एक एकल रेगुलर एक्सप्रेशन मैच का उपयोग करना पसंद करता हूं:

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

यदि आप 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. जब कुकी आखिरी कुकी है इस मामले में कुकी मूल्य के बाद एक अर्धविराम नहीं होगा।
  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. [^;]* – एक अर्द्ध-बृहदान्त्र के अलावा शून्य या अधिक वर्णों का मिलान करता है इसका मतलब है कि यह अक्षर से मेल खाते देगा, लेकिन एक अर्द्ध-बृहदान्त्र या स्ट्रिंग के अंत तक इसमें शामिल नहीं होगा।

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

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

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

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

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

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

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

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 भी बदलेगा।

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

 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 या कुछ के लिए कोई ज़रूरत नहीं है शुद्ध पुराने अच्छे जावास्क्रिप्ट

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

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

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

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

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

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

जावास्क्रिप्ट द्वारा सेट

 document.cookie = 'cookiename=tesing'; 

jquery द्वारा प्राप्त करें

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

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

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

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

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

यह फ़ंक्शन अंडरस्कोरज _.फिंड-फ़ंक्शन का उपयोग करता है। कुकी का नाम मौजूद नहीं होने पर अनिवार्य रूप से रिटर्न मिलता है

डस्टिन डाएज (भयानक) ने जेएस में अपने सभी समय का उपयोगी कार्य किया। अपने शब्दों में:

"मैं जावास्क्रिप्ट में कुकी सेट करने की DOM कार्यान्वयन से नफरत करता हूं। PHP में यह बहुत आसान है, और यह एक मुख्य कारण के लिए आसान है, वे नीचे कार्य की तरह कार्य करते हैं …"

देखें: http://www.dustindiaz.com/top-ten-javascript

 function getCookie(name) { var start = document.cookie.indexOf(name + "="); var len = start + name.length + 1; if ((!start) && (name != document.cookie.substring(0, name.length))) { return null; } if (start == -1) return null; var end = document.cookie.indexOf(';', len); if (end == -1) end = document.cookie.length; return unescape(document.cookie.substring(len, end)); } 

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

 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 

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

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

ध्यान दें कि मैंने ईई 6 के टेम्प्लेट स्ट्रिंग्स का इस्तेमाल रेगेक्स अभिव्यक्ति के निर्माण के लिए किया था।

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

मैंने इसे इस तरह से किया है ताकि मैं मूल्यों को अलग करने के लिए एक ऑब्जेक्ट प्राप्त कर सकूं। इसके साथ ही आप कुकी को माता-पिता को पास कर सकते हैं और फिर आप अपने मूल्यों की तरह चाबियाँ एक्सेस कर सकते हैं

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

निम्नलिखित फ़ंक्शन आवश्यक कुकी की एक key-value जोड़ी वापस करेगा, जहां key कुकी का नाम है और value कुकी का 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; }; 

कुकीज़ उदाहरण: उदाहरण जेएस:

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

जेएसन या एक्सएमएल के साथ स्टोर एरेज़ और ऑब्जेक्ट्स

मैं ऐसा कुछ करूँगा:

 function getCookie(cookie){ return cookie .trim() .split(';') .map(function(line){return line.split(',');}) .reduce(function(props,line) { var name = line[0].slice(0,line[0].search('=')); var value = line[0].slice(line[0].search('=')); props[name] = value; return props; },{}) } 

यह आपकी कुकी को एक ऑब्जेक्ट के रूप में वापस लौटा देगा।

और फिर आप इसे इस तरह से कॉल कर सकते हैं:

 getCookie(document.cookie)['shares'] 

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

आप निम्न के साथ कुकी का मूल्य प्राप्त कर सकते हैं:

 var foo = cookies.get( "bar" ); 

कोड:

 var cookies = ( function() { var cookieString = null; var cookieArray = []; function getValOf( name ) { if ( newCookies() ) { parseCookieString() } return cookieArray[ name ]; } // Check if new cookies have been added function newCookies() { return cookieString === document.cookie; } function parseCookieString() { cookieString = document.cookie; // Separate cookies var cookies = cookieString.split( ";" ); // Empty previous cookies cookieArray = []; // Update cookieArray with new name-value pairs for ( var i in cookies ) { // Separate name and value var nameVal = cookies[ i ].split( "=" ); var name = nameVal[ 0 ].trim(); var value = nameVal[ 1 ].trim(); // Add cookie name value pair to dictionary cookieArray[ name ] = value; } } return { /** * Returns value or undefined */ get: function( name ) { return getValOf( name ); } }; })(); 

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