2008-09-25 20 views

Odpowiedz

-2

Używam tego. To był niezawodny:

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

Może być problematyczne, jeśli przeszukasz BEL i jest plik cookie o nazwie REBEL, nie? – PhiLho

2

Zawsze muszę do niego dostęp, używam document.cookie, w zasadzie, jak to jest opisane w tym artykule. Zastanawiam się, nigdy nie korzystałem z prototypu, więc mogą istnieć łatwiejsze metody, których po prostu nie spotkasz.

+0

Tak, użyłem w przeszłości także kodu ciasteczek get/set quirksmode. – EvilSyn

+0

Polecam także funkcję ciasteczek quirksmode. – Prestaul

9

Używam tego rutynę:

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

działa całkiem dobrze.

2

W przypadku ktoś go potrzebuje, mam stały się zająć PhiLho's concern o znaków, próbując sprowadzić wartość cookie.

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

Ja również niedawno wybudowany znacznie bardziej zwarty RegExp, które powinny pracować, a także:

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

Zrobiłem kilka testów prędkości, które zdają się wskazywać, że z Philo, Quirks Mode i te dwie implementacje wersja non-RegExp (przy użyciu indexOf jest bardzo szybka, nie jest ogromną niespodzianką) powyżej jest najszybsza. http://jsperf.com/cookie-fetcher

+0

W swojej nowej funkcji, gdzie występuje argument "c_name"? – ermannob

Powiązane problemy