2010-05-18 15 views
15

He intentado buscar en el manual de PHP y de Internet sobre cómo eliminar las cookies y he tratado de la misma manera exacta que todos dicen:problemas al eliminar las cookies, no va a desarmar

setcookie("name", '', 1); 

o

setcookie("name", '', time()-3600); 

Pero cuando reviso las cookies en el diálogo de cookies en Firefox, sigue ahí con el mismo valor. puse esta cookie utilizando la siguiente línea:

setcookie("name", $value, time() + 259200, $path); 

encontré this pregunta sobre stackoverflow: , pero ninguna de las respuestas resuelto el problema. También intenté poner todos los parámetros, como dijo el autor, pero no tuvo ningún efecto.

¿Alguien ha visto el problema?

+0

puntos en los nombres de cookies se sustituyen por caracteres _ - esto podría causar algunos problemas – Andris

+0

En primer lugar, asegúrese de que la vista de galletas (por ejemplo, en Firefox) es realmente fresco. Luego, haga lo que ya hizo, pero preste atención a todas las propiedades * que deben ser iguales * para la operación "establecer" y "deshacer" o "eliminar". Además, puede usar algo como '$ cookie-> delete();' de https://github.com/delight-im/PHP-Cookie para mayor conveniencia. – caw

Respuesta

38

The manual states:

cookies deben ser borrados con los mismos parámetros que se establecen con. Si el argumento de valor es una cadena vacía, o FALSE, y todos los demás argumentos coinciden con una llamada previa a setcookie, la cookie con el nombre especificado se eliminará del cliente remoto. Esto se logra internamente al establecer el valor en 'eliminado' y el tiempo de caducidad a un año en el pasado.

Así también asegurarse de que se ha especificado correctamente $path - también cuando eliminarlo. Por ejemplo, si la cookie se especificó en un subdirectorio, es posible que no pueda eliminarla de los directorios principales o secundarios (o de ambos).

No estoy del todo seguro de cómo funcionan los permisos, pero es posible que desee utilizar la barra de herramientas del desarrollador web para ver qué ruta es de la cookie que está intentando eliminar.

+0

Estoy revisando el cuadro de diálogo Cookies de Firefox, y la ruta que estoy usando para establecer la cookie es la misma que la ruta que estoy usando para desarmarla. Pero la dirección donde trato de desarmar la cookie no es la misma que la ruta donde configuré la cookie. También descubrí que puedo cambiar el valor de la cookie, si la fecha de vencimiento es futura. Si uso un valor en el pasado, no pasa nada. ¿Extraño? – RemiX

+0

¡Después de varios minutos de pruebas, no pude hacerlo funcionar! Sin eliminación de cookies en absoluto. Ahora sé: use setcookie con los mismos parámetros que utilizó en el momento de la creación, $ path, $ domain, etc. ¡setcookie ($ name, NULL, -1) no es suficiente! ¡Gracias por tu comentario! – michauko

+0

Infierno, sí, esta es la respuesta correcta. –

0

¿Ha intentado establecer el tiempo a un valor pequeño y utilizando un valor para cookie?

setcookie("name", 'n', 1); 
+0

Descubrí que en realidad puedo cambiar los valores si la fecha de vencimiento es futura. Entonces el valor no importa. Pero usar '1' como el tiempo no parece funcionar, al igual que el tiempo() - 3600. – RemiX

2

He intentado utilizar

setcookie("name", "", -1); 

y en mi servidor con Apache/PHP5 se aclaró la cookie (por lo menos una var_dump ($ _ COOKIE) mostró una matriz vacía).

1

¿Ha comprobado si su secuencia de comandos ya envía sus encabezados HTTP?

if (headers_sent()) { 
    trigger_error("Cant change cookies", E_USER_NOTICE); 
} 
+0

Sin errores de encabezado. – RemiX

0

A mí me ocurre también una de cada diez veces. Supongo que es un problema con la forma en que codificamos.

Este es mi código

setcookie("token", "", time() - 36000, "/"); 
+0

¿Cuál es exactamente la diferencia? También intenté usar el parámetro path, si eso es lo que quieres decir? – RemiX

+0

No, quiero decir que incluso tengo el mismo problema que tú. –

8

Ok, realmente no entiendo, pero funciona ahora. El código mágico es:

setcookie("name", '', 1, $path); 

¿No lo he intentado ya? ?? Como sea, funciona ahora. Gracias por su ayuda, gente!

0

I sugest a la utilización de

ob_start(); 

en el firts l

0

que tenía un problema similar.

me encontré con que, por cualquier razón, haciéndose eco de algo fuera de lo que realmente hizo logout.php borrar la cookie:

echo '{}'; 
setcookie('username', '', time()-3600, '/'); 
0

Me sorprende que nadie ha publicado aún, pero esto funciona perfectamente para mí :

para crear o cambiar la galleta por su nombre:

$_COOKIE['myCookieName'] = 'I can be changed to whatever u want'; 

Para eliminar una cookie por su nombre :

unset($_COOKIE['myCookieName']); 
0

veces os guarda la cookie en un camino diferente de lo que estamos tratando de eliminar/USET en

Id por ejemplo.. configuración de las cookies de cromo y comprobar la ruta de la cookie, a continuación, añadir la ruta al comando setcookie, y eliminar así:

setcookie("my_cookie_name","",1,'/mypath'); 

intentar eliminar o desarmar una cookie que se guarda en el camino equivocado no va a funcionar y puede ser muy frustrante

0

Basta con definir una función personalizada en funciones básicas globales presentar como global.php

function delete_cookie() 
{ 
unset($_COOKIE['cookiename']); 
setcookie('cookiename',NULL,time()-3600, '/'); 
return true; 
} 

y el uso de esta función en la parte superior del código HTML como

include('global.php') 
if(isset($_GET['delete_cookie'])) 
{ 
delete_cookie(); //if you want to pass the parameters into the function also possible like delete_cookie(param1); 
} 
1

Si eliminar cookies para la ruta específica y su parámetro de ruta termina con barra inclinada '/', entonces funcionará en Firefox y IE, pero wo no funciona en Chrome y Opera. Si no hay una barra inclinada, solo funcionará en Chrome y Opera.

lo que debe utilizar tanto:

setcookie('cookiename', '', time() - 60*60*24, $chatPath); // WebKit 
setcookie('cookiename', '', time() - 60*60*24, $chatPath . '/'); // Gecko, IE 
1

establece una cookie

setcookie ('cookiename', $ cookie_value, el tiempo() + (86400 * 30), "/"); // 86400 = 1 día

galleta unset

setcookie ('cookiename', '', tiempo de() - 3600, "/");

No hay necesidad de entrar en pánico. Solo copie la función que usa para configurar la cookie y ahora menos el tiempo. No te confundas, hazlo fácil y claro.

0

Esto hizo el truco para mí:

setcookie("brownie","",1,'/'); 
unset($_COOKIE["brownie"]); 
2

Me sorprende que nadie lo ha mencionado (o tal vez no me di cuenta), pero dominio es importante también! Si está en subdominio.example.com y la cookie es de .example.com, debe establecer explícitamente el parámetro de dominio, de lo contrario asumirá el dominio actual y no funcionará.

setcookie('cookiename', FALSE, -1, '/', '.example.com'); 

El valor de los subdominios no borrará las cookies del dominio principal.

-1
var remember = $.cookie('auto_login'); 
if (remember == 'true') { 
    var username = $.cookie('username'); 
    var password = $.cookie('password'); 
    $('#username').val(username); 
    $('#password').val(password); 
} 

$('#logsub').click(function (event) { 
    if ($('#auto_login').is(':checked')) { 
     var username = $('#username').val(); 
     var password = $('#password').val(); 
     // set cookies to expire in 14 days 
     $.cookie('username', username, {expires: 14}); 
     $.cookie('password', password, {expires: 14}); 
     $.cookie('auto_login', true, {expires: 14}); 
    } else { 
     // reset cookies 
     $.cookie('username', null); 
     $.cookie('password', null); 
     $.cookie('auto_login', null); 
    } 
}); 
+1

Si bien este fragmento de código puede resolver la pregunta, [incluyendo una explicación] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. – DimaSan

Cuestiones relacionadas