2010-07-06 19 views
6

Tengo una cookie que uso en mi aplicación. Se ve así:Cookie PHP escribe en el dominio incorrecto

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

En una sección de mi guión, basado en una cierta condición, que estoy tratando de cambiar el valor de una cookie. Estoy usando este código:

// overwrite cookie 
if($condition){ 
    setcookie("foo", "cat", 0, "/", "my.domain.tld"); 
} 

Después, mis datos de la cookie se parece a esto:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
| foo | cat | .my.domain.tld  |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

¿Cómo es que un . se antepondrá al dominio? Quiero sobrescribir la cookie existente.

+0

no tiene sentido, * debe * establecerse en anything.domain.tld de lo contrario, hay un gran error en alguna parte, lo único que me atrevo a sugerir, es que vuelva a comprobar y asegúrese de que la primera cookie no es de hecho establecido en. cualquier cosa que no sea el segundo .. – nathan

+0

Nathan, parece que no es un error tanto como podría ser una fuente común de confusión. Consulte la respuesta a continuación :) –

+0

Puede encontrar ['$ cookie-> setDomain ($ domain)'] (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php# L117) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Cookie). Se encarga de normalizar el nombre de dominio que proporcionó. – caw

Respuesta

0

Como resultado, especificando ningún dominio parece funcionar:

setcookie("foo", "cat", 0, "/"); 

esperado datos de cookies:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | cat | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

Extraño, pero funciona.

0

De la documentación:

El dominio que la cookie está disponible. Para que la cookie esté disponible en todos los subdominios de example.com, debe establecerla en '.example.com'. Los . no es necesario, pero lo hace compatible con más navegadores. Configurarlo en www.example.com hará que la cookie solo esté disponible en el subdominio www. Consulte la coincidencia de cola en la especificación »para más detalles.

Y la especificación correspondiente cola está aquí:

http://curl.haxx.se/rfc/cookie_spec.html

+0

Debería haber sido más específico. Por 'cualquier cosa 'quise decir que el subdominio podría ser cualquier cosa. No quería limitar las respuestas a un subdominio específico 'www'. Para ser más precisos, no quiero que la cookie coincida con * todos * los subdominios del dominio. Actualicé mi pregunta –

Cuestiones relacionadas