2008-09-25 21 views
6

Prototip kullanıyorum ve kuralı ayarlamak veya almak için yerleşik uzantıları bulamıyorum. Biraz uğraştıktan sonra, bununla ilgili birkaç farklı yol görüyorum. JavaScript'te bir çerez almak için en iyi yaklaşımın ne olduğunu düşündüğünüzü merak ediyordum?JavaScript'te bir ada sahip olmanın en iyi yolu nedir?

cevap

-2

Bunu kullanıyorum. Bu güvenilir olmuştur:

function getCookie(c_name) { 
if (document.cookie.length>0) 
    { 
    c_start=document.cookie.indexOf(c_name + "=") 
    if (c_start!=-1) 
    { 
    c_start=c_start + c_name.length+1 
    c_end=document.cookie.indexOf(";",c_start) 
    if (c_end==-1) c_end=document.cookie.length 
    return unescape(document.cookie.substring(c_start,c_end)) 
    } 
    } 
return "" 

}

+6

Eğer BEL de arama yapıyorsanız ve REBEL adında bir çerez var, sorun değil. – PhiLho

2

Herzaman ben o makalede özetlenen oluyor temelde nasıl ben document.cookie kullanmak, erişmek gerekir. Caveat, Ben asla prototip kullanmamıştım, o yüzden burada hiç rastlamadığınız daha kolay yöntemler olabilir.

function ReadCookie(name) 
{ 
    name += '='; 
    var parts = document.cookie.split(/;\s*/); 
    for (var i = 0; i < parts.length; i++) 
    { 
    var part = parts[i]; 
    if (part.indexOf(name) == 0) 
     return part.substring(name.length) 
    } 
    return null; 
} 

oldukça iyi çalışır:

+0

Yea Ben de geçmişte quirksmode get/set çerez kodunu kullandım. – EvilSyn

+0

Quirksmode'un çerez işlevini de öneririm. – Prestaul

2

Başka birinin buna ihtiyacı varsa, bir çerez değeri almaya çalışırken kısmi eşlemeler hakkında PhiLho's concern adresine adresleme yapmak için düzeltdim.

function getCookie(c_name) { 
    var nameEQ = c_name + '='; 
    var c_start = 0; 
    var c_end = 0; 
    if (document.cookie.substr(0, nameEQ.length) === nameEQ) { 
     return document.cookie.substring(nameEQ.length, document.cookie.indexOf(';', nameEQ.length)); 
    } else { 
     c_start = document.cookie.indexOf('; ' + nameEQ); 
     if(c_start !== -1){ 
      c_start += nameEQ.length + 2; 
      c_end = document.cookie.indexOf(';', c_start); 
      if (c_end === -1) {c_end = document.cookie.length;} 
      return document.cookie.substring(c_start, c_end); 
     } 
    } 
    return null; 
} 

Geçenlerde aynı zamanda çalışması gerektiğini çok daha kompakt bir RegExp inşa ettik:

function getCookie(c_name){ 
    var ret = window.testCookie.match(new RegExp("(?:^|;)\\s*"+c_name+"=([^;]*)")); 
    return (ret !== null ? ret[1] : null); 
} 

yaptım Philo, QuirksMode dışına olduğunu gösterir gibi görünmektedir bazı hız testleri ve bu iki RegExp olmayan uygulamalar (indexOf kullanarak çok hızlı, büyük bir sürpriz değil) yukarıda en hızlı olanıdır. http://jsperf.com/cookie-fetcher

+0

"c_name" argümanının gittiği yeni fonksiyonunuzda? – ermannob

İlgili konular