2009-03-09 10 views
5

Sto tentando di scrivere codice PHP per eliminare tutti i cookie utente sul mio dominio.Impossibile cancellare i cookie impostati in JavaScript sul server

Ecco cosa ho ottenuto:

<?php 
$domain = 'www.example.com'; 
$deleteExpiration = time() - 60*60*24*365*10; // 10 years ago 
foreach (array_keys($_COOKIE) as $cookie) { 
    setcookie($cookie, 0, $deleteExpiration, '/', $domain); 
} 

L'esecuzione di questo codice su http://www.example.com/delete_cookies.php elimina tutti i cookie impostati sul server, ma non i cookie che sono stati fissati in JavaScript.

Ho verificato utilizzando la finestra di dialogo dei cookie di Firefox che i cookie problematici provengono effettivamente da (percorso = /; dominio = www.esempio.com). Utilizzando le intestazioni HTTP in diretta, posso vedere che la seguente intestazione viene inviato:

Set-Cookie: CookieName=0; expires=Fri, 12-Mar-1999 19:36:15 GMT; path=/; domain=www.example.com 

quindi credo che il comando setcookie funziona come previsto. Firefox non sta rispettando la richiesta.

Una cosa aggiuntiva che ho notato è che se ho impostato un cookie con domain=www.example.com sul server, allora è elencato nella finestra di cookie di Firefox con domain=".www.example.com", ma se ho impostato il seguente biscotto utilizzando il codice JavaScript, allora il punto iniziale è non aggiunto.

Cosa sto sbagliando? Come posso cancellare questi cookie?

+0

http://stackoverflow.com/a/25967822/1642018 – AMB

+0

È possibile trovare ['$ cookie-> delete()'] (https://github.com/delight-im/PHP-Cookie/blob/ 004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php # L173) utile, come trovato in [questa libreria autonoma] (https://github.com/delight-im/PHP-Cookie). – caw

risposta

5

Ho avuto un problema simile ed è stato risolto semplicemente non passando il dominio.

setcookie($cookie, '', 1, '/');

Su un lato nota da cookie_spec "Impostare il percorso per un valore di livello superiore non prevale altre mappature del percorso più specifici. Se non ci sono più corrispondenze per un dato nome di cookie, ma con percorsi separati , tutti i cookie corrispondenti verranno inviati. "Quindi se si hanno i cookie sullo stesso nome in percorsi diversi, sarà necessario eliminarli tutti.

Problemi correlati