2010-02-17 10 views
17

Alguna aplicación, no escrita por mí, y no en PHP, crea una cookie para el dominio "www.dominio.com".php setcookie domain

Estoy tratando de reemplazar esa cookie. Así que en php que hice:

setcookie('mycookie','mydata',time() + 2*7*24*60*60,'/','www.domain.com', false); 

Sin embargo se crea la cookie que resulta de dominio: "" ".www.domain.com", tenga en cuenta el punto por delante del dominio.

Para que no lo reemplace, crea otra cookie. ¿Qué puedo hacer?

+0

Los dominios 'www.dominio.com' y' .www.domain.com' (tenga en cuenta el punto inicial) se tratan de la misma manera, al menos según RFC 6265, que es lo que * cada * navegador moderno implementa. Dice que el punto inicial es * ignorado *. Pero si las cookies no se sobreescriben con éxito, esto puede deberse a diferencias en las propiedades "ruta", "dominio", "seguro" o "httpOnly", que no podemos ver aquí. En general, puede probar https://github.com/delight-im/PHP-Cookie para una administración de cookies más sencilla. – caw

Respuesta

31

El tema también son destinatarios aquí: http://php.net/manual/en/function.setcookie.php

Ver comentario de "Jah": If you want to restrict the cookie to a single host, supply the domain parameter as an empty string

También puede probar ".dominio.com" como el dominio. El punto final permitirá una cookie para todos los subdominios para "dominio.com" y podría sobrescribir el "www." - cookie, pero primero voy a ir con la solución anterior.

+4

+1 No especificando el dominio es la clave. – Gumbo

+0

Estaba buscando la respuesta a esto también, y efectivamente, dejar el dominio en blanco funcionó. Gracias. –

+1

Tenga cuidado, si utiliza y vacía una cadena para el dominio, es posible que algunos navegadores se confundan. Si puedes, usa getenv ('HTTP_HOST') –

-1

Intenta crear varias otras cookies con el mismo nombre, pero con un dominio diferente. Ejemplo:

setcookie('mycookie','mydata1',time() + 2*7*24*60*60,'/','www.domain.com', false); 
setcookie('mycookie','mydata2',time() + 2*7*24*60*60,'/','www.domain.com', false); 
setcookie('mycookie_top','mydata1',time() + 2*7*24*60*60,'/','domain.com', false); 
setcookie('mycookie_top','mydata2',time() + 2*7*24*60*60,'/','domain.com', false); 

Luego inspeccione la cookie creada por estos comandos en el Firebug. Si siguió obteniendo una cookie doble, entonces esto podría ser un error en el PHP. Además, intente configurar la cookie en el código de JavaScript, vea si todavía tiene los mismos problemas.

4

Si especifica un dominio, debe seguir RFC 2109 y prefijar el dominio con un punto; de lo contrario, el cliente lo hará. Pero si no especifica ningún dominio, el cliente tomará el dominio de la solicitud.