2008-09-25 17 views

Respuesta

-2

Yo uso esto. Ha sido fiable:

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

Puede ser problemático si buscas BEL y hay una cookie llamada REBEL, ¿no? – PhiLho

2

Cada vez que necesita para acceder a ella, yo uso document.cookie, básicamente, cómo se describe en este artículo. Cuidado, nunca he usado un prototipo, por lo que puede que haya métodos más fáciles que no haya encontrado.

+0

Sí, he usado el código de cookie get/set de quirksmode en el pasado también. – EvilSyn

+0

Recomendaría la función de cookie de quirksmode también. – Prestaul

9

utilizo esta rutina:

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

funciona bastante bien.

2

En caso de que alguien más lo necesite, he arreglado en la dirección PhiLho's concern sobre coincidencias parciales cuando intento recuperar el valor de una 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; 
} 

he recientemente también construyeron una expresión regular mucho más compacto que debería funcionar así:

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

Hice algunas pruebas de velocidad que parecen indicar que de Philo, quirksmode, y estos dos implementaciones la versión no RegExp (utilizando indexOf es muy rápido, no es una gran sorpresa) arriba es la más rápida. http://jsperf.com/cookie-fetcher

+0

En su nueva función, ¿dónde va el argumento "c_name"? – ermannob

Cuestiones relacionadas