2009-03-09 17 views
5

Estoy tratando de escribir código PHP para eliminar todas las cookies de usuario en mi dominio.No se pueden eliminar las cookies que se establecieron en JavaScript en el servidor

Esto es lo que tengo:

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

La ejecución de este código en http://www.example.com/delete_cookies.php borra todas las cookies que se establecieron en el servidor, pero no las cookies que se establecieron en JavaScript.

He verificado mediante el diálogo Cookies de Firefox que las cookies problemáticas son de (path = /; domain = www.example.com). El uso de cabeceras HTTP en directo, puedo ver que la siguiente cabecera se envía:

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

así que creo que el comando setcookie está funcionando como se esperaba. Firefox simplemente no está cumpliendo con la solicitud.

Una cosa adicional que he notado es que si me puse una cookie con domain=www.example.com en el servidor, entonces aparece en el cuadro de diálogo de cookies Firefox con domain=".www.example.com", pero si fijo la siguiente galletas utilizando código JavaScript a continuación, el punto inicial es no añadido.

¿Qué estoy haciendo mal? ¿Cómo puedo eliminar estas cookies?

+0

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

+0

Puede encontrar ['$ cookie-> delete()'] (https://github.com/delight-im/PHP-Cookie/blob/ 004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php # L173) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Cookie). – caw

Respuesta

5

Tuve un problema similar y se resolvió simplemente no pasando el dominio.

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

En una nota de cookie_spec "Definición de la ruta a un valor de más alto nivel, no se anula otras asignaciones de ruta más específicos. Si hay varias coincidencias para un nombre de la cookie determinada, pero con caminos separados , se enviarán todas las cookies coincidentes. "Por lo tanto, si tiene las mismas cookies de nombre en diferentes ubicaciones de ruta, deberá eliminar cada una.

Cuestiones relacionadas