अगर कुकी मौजूद है तो जांचने का एक अच्छा तरीका क्या है?
शर्तेँ:
कुकी मौजूद है अगर
cookie1=;cookie1=345534;
//or
cookie1=345534;cookie1=;
//or
cookie1=345534;
कुकी मौजूद नहीं है अगर
cookie=;
//or
<blank>
अगर कुकी मौजूद है तो जांचने का एक अच्छा तरीका क्या है?
शर्तेँ:
कुकी मौजूद है अगर
cookie1=;cookie1=345534;
//or
cookie1=345534;cookie1=;
//or
cookie1=345534;
कुकी मौजूद नहीं है अगर
cookie=;
//or
<blank>
जवाबों:
आप फ़ंक्शन को कुकी जिसे आप चाहते हैं, के नाम के साथ कॉल कर सकते हैं, फिर यह देखने के लिए जांचें कि क्या यह = null है।
function getCookie(name) {
var dc = document.cookie;
var prefix = name + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
}
else
{
begin += 2;
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
}
// because unescape has been deprecated, replaced with decodeURI
//return unescape(dc.substring(begin + prefix.length, end));
return decodeURI(dc.substring(begin + prefix.length, end));
}
function doSomething() {
var myCookie = getCookie("MyCookie");
if (myCookie == null) {
// do cookie doesn't exist stuff;
}
else {
// do cookie exists stuff
}
}
मैंने एक वैकल्पिक गैर- jQuery संस्करण तैयार किया है:
document.cookie.match(/^(.*;)?\s*MyCookie\s*=\s*[^;]+(.*)?$/)
यह केवल कुकी अस्तित्व के लिए परीक्षण करता है। एक अधिक जटिल संस्करण कुकी मान भी लौटा सकता है:
value_or_null = (document.cookie.match(/^(?:.*;)?\s*MyCookie\s*=\s*([^;]+)(?:.*)?$/)||[,null])[1]
के स्थान पर अपना कुकी नाम रखें MyCookie
।
document.cookie.indexOf('cookie_name=');
-1
यदि कुकी मौजूद नहीं है तो यह वापस आ जाएगी ।
ps इसका केवल दोष यह है (जैसा कि टिप्पणियों में उल्लेख किया गया है) कि इस तरह के नाम के साथ कुकी सेट होने पर गलती होगी: any_prefix_cookie_name
( स्रोत )
-1
यदि cookie_name_whatever
सेट किया जाता है (भले ही कुकी_नाम नहीं है) के अलावा कुछ और उदाहरण देता है । अन्य उत्तर में रेगेक्स संस्करण हल करता है।
ध्यान! चुने हुए उत्तर में एक बग (जैक का उत्तर) होता है।
यदि आपके पास एक से अधिक कुकी हैं (बहुत संभावना है ..) और जिस कुकी को आप प्राप्त कर रहे हैं, वह सूची में पहली है, यह चर "अंत" को सेट नहीं करता है और इसलिए यह "कुकीनाम" का अनुसरण करते हुए वर्णों की पूरी स्ट्रिंग लौटाएगा। = "document.cookie string के भीतर!
यहाँ उस फ़ंक्शन का एक संशोधित संस्करण है:
function getCookie( name ) {
var dc,
prefix,
begin,
end;
dc = document.cookie;
prefix = name + "=";
begin = dc.indexOf("; " + prefix);
end = dc.length; // default to end of the string
// found, and not in first position
if (begin !== -1) {
// exclude the "; "
begin += 2;
} else {
//see if cookie is in first position
begin = dc.indexOf(prefix);
// not found at all or found as a portion of another cookie name
if (begin === -1 || begin !== 0 ) return null;
}
// if we find a ";" somewhere after the prefix position then "end" is that position,
// otherwise it defaults to the end of the string
if (dc.indexOf(";", begin) !== -1) {
end = dc.indexOf(";", begin);
}
return decodeURI(dc.substring(begin + prefix.length, end) ).replace(/\"/g, '');
}
यदि आप jQuery का उपयोग कर रहे हैं, तो आप jquery.cookie प्लगइन का उपयोग कर सकते हैं ।
एक विशेष कुकी के लिए मूल्य प्राप्त करना निम्नानुसार किया जाता है:
$.cookie('MyCookie'); // Returns the cookie value
regexObject। परीक्षण (स्ट्रिंग) स्ट्रिंग की तुलना में तेज है। मैच (RegExp)।
MDN साइट document.cookie के लिए प्रारूप का वर्णन करता है, और एक कुकी हड़पने के लिए (एक उदाहरण regex है document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1");
)। उसके आधार पर, मैं इसके लिए जाऊंगा:
/^(.*;)?\s*cookie1\s*=/.test(document.cookie);
सवाल एक समाधान के लिए पूछने के लिए लगता है जो कुकी सेट होने पर झूठा लौटता है, लेकिन खाली। उस स्तिथि में:
/^(.*;)?\s*cookie1\s*=\s*[^;]/.test(document.cookie);
परीक्षण
function cookieExists(input) {return /^(.*;)?\s*cookie1\s*=/.test(input);}
function cookieExistsAndNotBlank(input) {return /^(.*;)?\s*cookie1\s*=\s*[^;]/.test(input);}
var testCases = ['cookie1=;cookie1=345534;', 'cookie1=345534;cookie1=;', 'cookie1=345534;', ' cookie1 = 345534; ', 'cookie1=;', 'cookie123=345534;', 'cookie=345534;', ''];
console.table(testCases.map(function(s){return {'Test String': s, 'cookieExists': cookieExists(s), 'cookieExistsAndNotBlank': cookieExistsAndNotBlank(s)}}));
यह एक पुराना सवाल है, लेकिन यहाँ मैं उपयोग कर रहा हूँ ...
function getCookie(name) {
var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null;
}
यह null
कुकी या तो मौजूद नहीं है, या जब यह अनुरोधित नाम नहीं रखता है।
अन्यथा, मान (अनुरोधित नाम) वापस कर दिया जाता है।
एक कुकी को कभी भी मूल्य के बिना मौजूद नहीं होना चाहिए - क्योंकि, सभी निष्पक्षता में, इसका क्या मतलब है? 😄
अगर इसकी जरूरत नहीं रह गई है, तो यह सबसे अच्छा है कि सभी को एक साथ निकाल दें।
function deleteCookie(name) {
document.cookie = name +"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;";
}
function getCookie(name) {
var dc = document.cookie;
var prefix = name + "=";
var begin = dc.indexOf("; " + prefix);
if (begin == -1) {
begin = dc.indexOf(prefix);
if (begin != 0) return null;
else{
var oneCookie = dc.indexOf(';', begin);
if(oneCookie == -1){
var end = dc.length;
}else{
var end = oneCookie;
}
return dc.substring(begin, end).replace(prefix,'');
}
}
else
{
begin += 2;
var end = document.cookie.indexOf(";", begin);
if (end == -1) {
end = dc.length;
}
var fixed = dc.substring(begin, end).replace(prefix,'');
}
// return decodeURI(dc.substring(begin + prefix.length, end));
return fixed;
}
@ फंक्शन की कोशिश की, कुछ परेशानी हुई, यहाँ मैंने उनके फंक्शन को कैसे संपादित किया।
कुकी चर के बजाय आप सिर्फ document.cookie.split का उपयोग करेंगे ...
var cookie = 'cookie1=s; cookie1=; cookie2=test';
var cookies = cookie.split('; ');
cookies.forEach(function(c){
if(c.match(/cookie1=.+/))
console.log(true);
});
नोड का उपयोग करने वाले किसी के लिए, मुझे ईएस 6 आयात और cookie
मॉड्यूल के साथ एक अच्छा और सरल समाधान मिला !
सबसे पहले कुकी मॉड्यूल स्थापित करें (और निर्भरता के रूप में सहेजें):
npm install --save cookie
फिर आयात और उपयोग करें:
import cookie from 'cookie';
let parsed = cookie.parse(document.cookie);
if('cookie1' in parsed)
console.log(parsed.cookie1);
इस विधि का उपयोग करें:
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
else return null;
}
function doSomething() {
var myCookie = getCookie("MyCookie");
if (myCookie == null) {
// do cookie doesn't exist stuff;
}
else {
// do cookie exists stuff
}
}
/// ************************************************ cookie_exists
/// global entry point, export to global namespace
/// <synopsis>
/// cookie_exists ( name );
///
/// <summary>
/// determines if a cookie with name exists
///
/// <param name="name">
/// string containing the name of the cookie to test for
// existence
///
/// <returns>
/// true, if the cookie exists; otherwise, false
///
/// <example>
/// if ( cookie_exists ( name ) );
/// {
/// // do something with the existing cookie
/// }
/// else
/// {
/// // cookies does not exist, do something else
/// }
function cookie_exists ( name )
{
var exists = false;
if ( document.cookie )
{
if ( document.cookie.length > 0 )
{
// trim name
if ( ( name = name.replace ( /^\s*/, "" ).length > 0 ) )
{
var cookies = document.cookie.split ( ";" );
var name_with_equal = name + "=";
for ( var i = 0; ( i < cookies.length ); i++ )
{
// trim cookie
var cookie = cookies [ i ].replace ( /^\s*/, "" );
if ( cookie.indexOf ( name_with_equal ) === 0 )
{
exists = true;
break;
}
}
}
}
}
return ( exists );
} // cookie_exists
यहाँ कई अच्छे उत्तर हैं। मैं फिर भी पसंद करते हैं [1] के लिए रेगुलर एक्सप्रेशन का उपयोग नहीं है, और [2] तर्क यह है कि पढ़ने के लिए आसान है का उपयोग कर, और [3] एक छोटी समारोह है कि करने के लिए [4] करता है नहीं करता है, तो नाम एक और कुकी की सबस्ट्रिंग है लौटने सच नाम। अंत में [५] हम प्रत्येक लूप के लिए उपयोग नहीं कर सकते हैं क्योंकि एक वापसी इसे नहीं तोड़ती है।
function cookieExists(name) {
var cks = document.cookie.split(';');
for(i = 0; i < cks.length; i++)
if (cks[i].split('=')[0].trim() == name) return true;
}
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);
}
कुकीज़ की एक वस्तु प्राप्त करने के लिए बस कॉल करें getCookie()
यह जाँचने के लिए कि कोई कुकी मौजूद है, इसे इस तरह करें:
if (!getcookie('myCookie')) {
console.log('myCookie does not exist.');
} else {
console.log('myCookie value is ' + getcookie('myCookie'));
}
या बस एक टर्नरी ऑपरेटर का उपयोग करें।
function hasCookie(cookieName){
return document.cookie.split(';')
.map(entry => entry.split('='))
.some(([name, value]) => (name.trim() === cookieName) && !!value);
}
नोट: लेखक यह चाहता था कि कुकी के खाली होने पर फंक्शन वापस आ जाए अर्थात cookie=;
यह && !!value
शर्त के साथ प्राप्त किया जाता है । इसे हटा दें अगर आपको लगता है कि एक खाली कुकी अभी भी एक मौजूदा कुकी है ...
var cookie = 'cookie1=s; cookie1=; cookie2=test';
var cookies = cookie.split('; ');
cookies.forEach(function(c){
if(c.match(/cookie1=.+/))
console.log(true);
});
ध्यान दें कि अगर कोई कुकी सुरक्षित है, तो आप ग्राहक के पक्ष में उसके अस्तित्व के लिए जाँच नहीं कर सकते हैं document.cookie
(जो सभी उत्तरों का उपयोग कर रहे हैं)। इस तरह के कुकी को केवल गंभीर तरफ ही जांचा जा सकता है।
unescape
से पदावनत किया गया है, क्याdecodeURIComponent
इसके बजाय उपयोग करने में कोई अंतर है ?