2008-11-04 6 views
15

का उपयोग करके एकल कुकी मान प्राप्त करने और सेट करने का "सबसे अच्छा तरीका" क्या है, जब भी पेज को संदर्भित किया जाता है, भले ही पेज कैश से लोड किया गया हो, मैं हर बार एक पृष्ठ मान को प्रतिबिंबित करना चाहता हूं। इसे लागू करने के लिए "सर्वश्रेष्ठ" या सबसे संक्षिप्त तरीका क्या है?जावास्क्रिप्ट

उत्तर

26

चोरी से http://www.quirksmode.org/js/cookies.html#script

function createCookie(name,value,days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     var expires = "; expires="+date.toUTCString(); 
    } 
    else var expires = ""; 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

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

function eraseCookie(name) { 
    createCookie(name,"",-1); 
} 

इसे प्रयोग:

मैं व्यक्तिगत रूप से अपनी परियोजनाओं पर jQuery का उपयोग, और मैं jQuery Cookie Plugin उपयोग करें, यह उपयोग करने के लिए वास्तव में आसान है

var oldCount = parseInt(readCookie('hitCount'), 10) || 0; 
createCookie('hitCount', oldCount + 1, 7); 
टिप्पणियों में उल्लिखित

, कुकीज़ के बाद से आपको int में डालना चाहिए संग्रहीत और स्ट्रिंग के रूप में लौटा दिया। foo++ या ++foo का उपयोग करना वास्तव में आप के लिए डाली, लेकिन यह पता करने के लिए वास्तव में क्या आप के साथ काम कर रहे हैं सुरक्षित है:

var x = "5"; // x = "5" (string) 
x += 1;  // x = "51" (string!) 
x += 5;  // x = "515" (string!) 
++x;   // x = 516 (number) 
+0

readCookie एक सबस्ट्रिंग देता है, आपको 1 को बढ़ाने के दौरान इसे एक संख्या के रूप में डालना चाहिए, अन्यथा आपके पास होगा , 1, 11, 111, 1111 ... – CMS

+0

आप – hultqvist

+2

मान के लिए भागने और अनदेखा खो रहे हैं ध्यान दें कि toGMTString को अब TOUTCString के पक्ष में बहिष्कृत कर दिया गया है – BeauCielBleu

7

वर्ष कुकी हैंडलिंग कार्यों मैं एक वापस लाने मूल्यों के भंडारण के लिए सरल स्ट्रिंग जोड़तोड़ का उपयोग this उदाहरण की तरह, आप अन्य पुस्तकालयों, cookie-js की तरह उपयोग कर सकते हैं देखा है, एक छोटे से (< 100 लाइनों) कुकी के लिए उपयोगिता के अधिकांश पहुंच।

var cookieName = "increment"; 

if ($.cookie(cookieName) == null){ 
    $.cookie(cookieName, 1, { expires: 10 }); 
}else{ 
    var newValue = Number($.cookie(cookieName)) + 1; 
    $.cookie(cookieName, newValue, { expires: 10 }); 
} 
0

सबसे अच्छा तरीका हमेशा सबसे सरल है:

function getCookie(name) { 
    return (name = (document.cookie + ';').match(new RegExp(name + '=.*;'))) && name[0].split(/=|;/)[1]; 
} 

// the default lifetime is 365 days 
function setCookie(name, value, days) { 
    var e = new Date; 
    e.setDate(e.getDate() + (days || 365)); 
    document.cookie = name + "=" + value + ';expires=' + e.toUTCString() + ';path=/;domain=.' + document.domain; 
} 

इन कार्यों मूल्य की उम्मीद एक साधारण स्ट्रिंग बनने के लिए, लेकिन आप हमेशा JSON कर सकते हैं यदि आप चाहते हैं या शायद इसके साथ कुछ और कर सकते हैं ...

संबंधित मुद्दे