2010-02-17 10 views
17

Alcune applicazioni, non scritte da me e non in PHP, creano un cookie per il dominio "www.dominio.com".dominio php setcookie

Sto cercando di sostituire quel cookie. Così in php che ho fatto:

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

Tuttavia si crea il cookie risultante per il dominio: "" ".www.domain.com", nota il punto prima del dominio.

Quindi non lo sostituisce, crea un altro cookie. Cosa posso fare?

+0

I domini 'www.dominio.com' e' .www.dominio.com' (si noti il ​​punto iniziale) sono trattati allo stesso modo, almeno secondo RFC 6265, che è ciò che * ogni * browser moderno implementa. Dice che il punto iniziale è semplicemente * ignorato *. Ma se i cookie non si sovrascrivono con successo, ciò potrebbe essere dovuto a differenze nelle proprietà "percorso", "dominio", "sicuro" o "httpOnly", che non possiamo vedere qui. In generale, puoi provare https://github.com/delight-im/PHP-Cookie per semplificare la gestione dei cookie. – caw

risposta

31

Il problema è anche destinatari qui: http://php.net/manual/en/function.setcookie.php

Vedere commento di "jah": If you want to restrict the cookie to a single host, supply the domain parameter as an empty string

Si potrebbe anche provare ".dominio.com" come dominio. Il punto finale consentirà un cookie per tutti i sottodomini per "dominio.com" e potrebbe sovrascrivere il "www." - cookie, ma prima andrò con la soluzione di cui sopra.

+4

+1 Non specificare il dominio è la chiave. – Gumbo

+0

Stavo cercando anche la risposta a questo, e abbastanza sicuro, lasciando il dominio vuoto ha funzionato. Grazie. –

+1

Stai attento, se usi e svuoti la stringa per il dominio potresti trovare che alcuni browser si confondono. Se puoi, usa getenv ('HTTP_HOST') –

-1

Provare a creare diversi altri cookie con lo stesso nome, ma un dominio diverso. Esempio:

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

Quindi ispezionare il cookie creato da questi comandi in Firebug. Se continuavi a ottenere un doppio cookie, allora questo potrebbe essere un bug nel PHP. Inoltre, prova a impostare il cookie nel codice javascript, controlla se hai ancora gli stessi problemi.

4

Se si specifica un dominio, è necessario seguire RFC 2109 e prefisso il dominio con un punto; altrimenti il ​​cliente lo farà. Ma se non si specifica un dominio, il client prenderà il dominio della richiesta.

Problemi correlati