2011-04-15 25 views
72

A continuación se muestra una cookie de JavaScript que se escribe en la computadora del usuario durante 12 meses.Crear una cookie de JavaScript en un dominio y leerla en subdominios

Después de que establezcamos la cookie en nuestro dominio principal, como example.com, si el usuario visita un subdominio como test.example.com, debemos seguir identificando la actividad del usuario en nuestro subdominio de "prueba".

Pero con el código actual, tan pronto como salen de www.example.com y visitan test.example.com, ya no se marcan como "HelloWorld".

¿Alguien podría ayudar con mi código para permitir que la cookie se lea entre subdominios?

<script type="text/javascript"> 
    var cookieName = 'HelloWorld'; 
    var cookieValue = 'HelloWorld'; 
    var myDate = new Date(); 
    myDate.setMonth(myDate.getMonth() + 12); 
    document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate; 
</script> 

Respuesta

154

acaba de establecer la domain y path atributos en su galleta, como:

<script type="text/javascript"> 
var cookieName = 'HelloWorld'; 
var cookieValue = 'HelloWorld'; 
var myDate = new Date(); 
myDate.setMonth(myDate.getMonth() + 12); 
document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate 
        + ";domain=.example.com;path=/"; 
</script> 
+0

Estoy tratando de hacer esto en localhost y no puedo cambiar la ruta – Enve

+6

@Enve - Los navegadores tratan las cookies de localhost de una manera diferente a otras cookies. O más bien, tratan todas las cookies de una manera que dificulta el trabajo con _localhost_. Por ejemplo, ver http://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain. Sugiero editar su archivo 'hosts' y aliasing algo como' myserver.local' a '127.0.0.1'. Luego puede usar eso para acceder a su servidor local (y al configurar las cookies), y con suerte todo debería funcionar. – aroth

+3

Todos los valores de cookie que cree y recupere deben ser valores de cadena. Las cadenas pueden contener caracteres que pueden alterar el almacenamiento local al intentar recuperarlos. Una cosa que sugeriría es utilizar los métodos globales 'encodeURI()' y 'decodeURI()' para el nombre y valor de la cookie para manejar cualquier conversión que deba tener lugar. es decir 'document.cookie = encodeURI (cookieName) +" = "+ encodeURI (cookieValue)'. –

24

que desee:

document.cookie = cookieName +"=" + cookieValue + ";domain=.example.com;path=/;expires=" + myDate; 

Según el RFC 2109, a comer una galleta a disposición de todos los subdominios, debe poner un . delante de su dominio.

Estableciendo la ruta =/tendrá la cookie disponible dentro de todo el dominio especificado (también conocido como .example.com).

+0

Gracias por su apoyo en esto. – Evan

+0

FWIW: creo que debes eliminar la pieza "path = expires =" y configurarla en "expires =". – malonso

+2

Según el más reciente [RFC 6265] (http://tools.ietf.org/html/rfc6265) ya no es necesario incluir el '.' delante del dominio. – Dan

3
document.cookie = "testCookie=cookieval; domain=." + 
location.hostname.split('.').reverse()[1] + "." + 
location.hostname.split('.').reverse()[0] + '; path=/" 

Ésta es una solución genérica que lleva el dominio raíz del objeto localización y establece la cookie. La inversión es porque no sabes cuántos subdominios tienes, si es que hay alguno.

+1

No funciona si tiene un dominio como ".com.co" – nikoskip

Cuestiones relacionadas