Usted puede encontrar $cookie->delete()a partir github.com/delight-im/PHP-Cookie útil. El código de la pregunta simplemente elimina la propiedad que se ha analizado en el lado del servidor. La cookie seguirá viva en el lado del cliente.
Entiendo que este es un ejemplo, pero nunca almacene el nombre de usuario o la contraseña en las cookies.
tamasd
3
No tiene sentido unset($_COOKIE['Hello']);. No cambia nada si lo elimina.
Machineaddict
30
@machineaddict unset($_COOKIE['Hello']);es realmente importante si puede verificar la cookie en algún lugar más adelante en el código.
Andreas Hultgren
44
funciona bien pero cuando intenta volver a cargar la página. vio la cookie establecida con datos antiguos ¿por qué?
Nilesh patel
9
======= NO FUNCIONA EN CHROME ======= Intenté este código hoy y cuando accedo al sitio usando google chrome, y luego entro en herramientas de desarrollador en chrome, puedo ver que el tiempo de caducidad se establece en 1 segundo antes de la época (por ejemplo, 1969-12-31 23:59:59), sin embargo, la próxima vez que envíe la página, la cookie se enviará al servidor. Cuando cambié el -1 a 1 (por ejemplo, 1970-01-01 00:00:01) para dar el siguiente comando: setcookie ('Hola', nulo, 1, '/'); luego Chrome actuó como se esperaba y no envió la cookie
Peter Hinds,
284
Establezca el valor en "" y la fecha de caducidad como ayer (o cualquier fecha anterior)
setcookie("hello","", time()-3600);
Luego, la cookie caducará la próxima vez que se cargue la página.
Si pone una fecha demasiado lejana en el pasado, IE la ladrará y la quemará, es decir, el valor no se eliminará.
Julien el
52
@strager El manual dice: si se establece en 0 o se omite, la cookie caducará al final de la sesión (cuando el navegador se cierre). Eso no es realmente eliminar la cookie. Realmente no sé si IE hará lo que dijo Julien, pero es más que posible que IE haga algo extraño.
Yannis
31
Además, no olvide desarmar también ($ _ COOKIE ["hola"]), porque si hay código en el resto de la página que mira $ _COOKIE ["hola"], todavía lo encontrará establecido. Acabo de ser mordido por este.
Magmatic
12
Además, es una buena idea establecer el camino, entonces setcookie ('hola', '', time () - 3600, '/');
Stephan Weinhold
227
Una forma limpia de eliminar una cookie es borrar tanto el $_COOKIEvalor como el archivo de cookies del navegador:
if(isset($_COOKIE['key'])){
unset($_COOKIE['key']);
setcookie('key','', time()-3600,'/');// empty value and old timestamp}
¡Este es el mejor método, porque no necesita actualizar la página!
MaxV
19
Sigo bajando la página y las respuestas siguen mejorando, divertido. Pero este es el mejor, deja de mirar aquí.
Andrew
23
Para su información, si configura la cookie utilizando una ruta, también deberá incluir la ruta en esta setcookiellamada:setcookie('key', '', time() - 3600, '/');
Gavin
1
@Gavin Gracias por ese consejo. Me preguntaba por qué no se borraba, pero sí con unsettingéxito.
stinkysGTI
1
Para cualquier persona que esté verificando la existencia de una cookie y se preocupe por las cookies que existen con nullvalores, deberá usar array_key_exists () , ya que una cookie con un nullvalor no será encontrada por un isset()cheque.
Leith
27
Para eliminar una cookie de manera confiable, no es suficiente configurarla para que caduque en cualquier momento en el pasado, como lo calculó su servidor PHP. Esto se debe a que las computadoras cliente pueden tener, y a menudo tienen, tiempos que difieren de los de su servidor.
La mejor práctica es sobrescribir la cookie actual con una cookie en blanco que caduque un segundo en el futuro después de la época (1 de enero de 1970 00:00:00 UTC), de la siguiente manera:
Corrígeme si me equivoco, pero establecer eso en "1" lo establecería en un segundo después de la época, ¿no un segundo en el futuro ...? Sin embargo, creo que tiene razón sobre las diferencias de zona horaria, por lo que la mejor solución sería establecerlo en 2 días en el pasado (por lo que incluso la zona horaria más lejana aún desarmaría la cookie).
PaulSkinner
@PaulSkinner la fecha de la época es independiente de las zonas horarias, la computadora hace ese cálculo por usted.
AlexR
3
@AlexR Sí. Aunque realmente no responde mi punto. A mi entender, el código anterior no establece la cookie expira en el pasado (un segundo más allá de la época), si no me engaño.
PaulSkinner
@PaulSkinner, por supuesto, el resto de tu comentario está perfectamente bien.
AlexR
9
+1 para el "1". No entiendo por qué todos los demás están tan obsesionados con configurar una cookie eliminada exactamente una hora antes.
Meisner
20
Eso deshabilitará la cookie en su código, pero como la variable $ _COOKIE se actualiza en cada solicitud, volverá a aparecer en la siguiente solicitud de página.
Para deshacerse de la cookie, establezca la fecha de vencimiento en el pasado:
// set the expiration date to one hour ago
setcookie("hello","", time()-3600);
@PratikCJoshi Solo si su código lo busca más adelante.
AlphaMycelium
14
Tuve el mismo problema en mi código y descubrí que era un problema de ruta de cookies. Echa un vistazo a esta publicación de desbordamiento de pila: no se puede eliminar la cookie set php
Había configurado la cookie usando un valor de ruta de "/", pero no tenía ningún valor de ruta cuando intenté borrarla, por lo que no se borró. Así que aquí hay un ejemplo de lo que funcionó:
Configuración de la cookie:
$cookiePath ="/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Vea la muestra etiquetada " Ejemplo # 2 setcookie () delete example " de los documentos PHP. Para borrar una cookie del navegador, debe decirle al navegador que la cookie ha caducado ... el navegador la eliminará. unsetcomo lo ha usado, solo elimina la cookie 'hola' de la matriz COOKIE.
Para eliminar la cookie solo necesita establecer el valor en NULL:
"Si ha configurado una cookie con valores no predeterminados para un tiempo de vencimiento, ruta o dominio, debe proporcionar esos mismos valores nuevamente cuando elimine la cookie para que la cookie se elimine correctamente". Cita del libro "Learning PHP5".
Entonces este código debería funcionar (funciona para mí):
Configuración de la cookie:
setcookie('foo', 'bar', time() + 60 * 5);
Eliminar la cookie:
setcookie('foo', '', time() + 60 * 5);
Pero me di cuenta de que todo el mundo está fijando la fecha de vencimiento como pasada, ¿es necesario y por qué?
Es confiable, por eso. Una combinación de establecer el valor en nada y un tiempo en el pasado (pero no demasiado lejos ya que a veces a IE no le gusta demasiado de lo que he leído) funciona en todos los ámbitos.
PaulSkinner
La cadena vacía ''no es lo mismo que null.
orev
3
Para eliminar todas las cookies, puede escribir:
foreach($_COOKIE as $key => $value){
unset($value);
setcookie($key,'', time()-3600);}
En realidad, esto no eliminará las cookies a menos que tengan la misma ruta y la misma configuración de dominio que los valores predeterminados de setcookie.
Noishe
2
Simplemente configure la fecha de vencimiento a una hora atrás, si desea "eliminar" la cookie, de esta manera:
Sé que ha pasado mucho tiempo desde que se creó este tema, pero vi un pequeño error en esta solución (puedo llamarlo así, porque es un detalle). Estoy de acuerdo en que la mejor solución es probablemente esta solución:
Pero, en el presente caso, elimina las cookies en todos los casos en que funciona la función no establecida e inmediatamente crea nuevas cookies caducadas en caso de que la función no establecida no funcione.
Eso significa que, incluso si la función de desactivación funciona, seguirá teniendo 2 cookies en la computadora. El objetivo solicitado, en un punto de vista lógico, es eliminar las cookies si es posible y si realmente no lo es, hacer que caduque; para obtener el resultado "más limpio".
La función no establecida está pensada para la lógica de PHP (si desea utilizar la variable $ _COOKIE ['Hola'], no puede, ya que no está establecida). Y la función setcookie está pensada para el navegador. 2 propósitos diferentes, el orden de las funciones no tiene impacto en el código real.
Kalzem
De hecho, lo sabía, pero si quieres estar seguro de que la cookie ha sido desarmada / eliminada y usas las dos soluciones de inmediato, sería más claro antes de que expiren estas tesis y luego desarmarlas que desarmarlas. luego recrear una cookie caducada ... si ves lo que quiero decir?
Greg
Sí, lo siento, respondí hace un momento :) Lo envié porque había visto a personas hacerlo de otra manera ... pero parece más inteligente así, creo.
Greg
2
$cookie_name ="my cookie";
$cookie_value ="my value";
$cookie_new_value ="my new value";// Create a cookie,
setcookie($cookie_name, $cookie_value , time()+(86400*30),"/");//86400 = 24 hours in seconds// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time()+(86400*30),"/");// Delete a cookie,
setcookie($cookie_name,'', time()-3600,"/");// time() - 3600 means, set the cookie expiration date to the past hour.
Este código eliminará la variable de cookies por completo de todo su dominio, es decir; "/": indica que el valor de la variable de cookie está configurado para todos los dominios, no solo para el dominio o ruta actual. time (): 300 indica que se establece en un tiempo anterior, por lo que caducará.
Puede establecer una variable de sesión basada en valores de cookies
session_start();if(isset($_COOKIE['loggedin'])&&($_COOKIE['loggedin']=="true")){
$_SESSION['loggedin']="true";}
echo ($_SESSION['loggedin']=="true"?"You are logged in":"Please Login to continue");
Simplemente puede usar esta función de personalización:
function unset_cookie($cookie_name){if(isset($_COOKIE[$cookie_name])){
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name,null,-1);}else{returnfalse;}}
Si desea eliminar $ _COOKIE ['user_account'].
Solo usa:
No. Solo lee los documentos. "Si se establece en 0 o se omite, la cookie caducará al final de la sesión (cuando el navegador se cierre)".
DrLightman
@DrLightman Gracias por su asistencia. ¿Puede por favor citar la documentación?
Amir Fo
function.setcookie.php , caduca el parámetro. "Si se establece en 0 o se omite, la cookie caducará al final de la sesión (cuando el navegador se cierre)".
DrLightman
1
Simplemente configure el valor de cookie falseen para desarmarlo,
Debe eliminar las cookies con php en su servidor y también con js para su navegador ... (Se han hecho con php, pero los archivos de cookies también están en el cliente del navegador):
Un ejemplo:
if($_GET['action']=='exit'){// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
El parámetro de dominio significará el dominio actual si se omite.
DustWolf
Quise decir que tu respuesta es incorrecta. Funcionará para cualquier dominio, no solo para la máquina local, ya que usará automáticamente el dominio actual. ¿Y tu comentario significa decir que estás ofendido o algo así?
DustWolf
¿Estás leyendo el texto que se encuentra arriba del código? deja de molestarme, estoy trabajando. Ya terminé de hablar contigo.
Peter Gruppelaar
No entiendo por qué te molestas con otros usuarios si señalan un error en tu respuesta. setcookiefunciona para cualquier dominio, localhost o no.
xorinzor
Entonces, si todo el mundo dice, ese es el caso ... entonces debe haber algo obviamente incorrecto con mi respuesta ... el hecho que se ha señalado en esta publicación no importa ... solo quieres algún tipo de respuesta de dirección e ignoro a cualquier usuario global que esté trabajando en una situación simular ... lo entiendo ... deja de molestarme, mi respuesta no es incorrecta.
$cookie->delete()
a partir github.com/delight-im/PHP-Cookie útil. El código de la pregunta simplemente elimina la propiedad que se ha analizado en el lado del servidor. La cookie seguirá viva en el lado del cliente.Respuestas:
Puedes probar esto
fuente
unset($_COOKIE['Hello']);
. No cambia nada si lo elimina.unset($_COOKIE['Hello']);
es realmente importante si puede verificar la cookie en algún lugar más adelante en el código.Establezca el valor en "" y la fecha de caducidad como ayer (o cualquier fecha anterior)
Luego, la cookie caducará la próxima vez que se cargue la página.
fuente
Una forma limpia de eliminar una cookie es borrar tanto el
$_COOKIE
valor como el archivo de cookies del navegador:fuente
setcookie
llamada:setcookie('key', '', time() - 3600, '/');
unsetting
éxito.null
valores, deberá usar array_key_exists () , ya que una cookie con unnull
valor no será encontrada por unisset()
cheque.Para eliminar una cookie de manera confiable, no es suficiente configurarla para que caduque en cualquier momento en el pasado, como lo calculó su servidor PHP. Esto se debe a que las computadoras cliente pueden tener, y a menudo tienen, tiempos que difieren de los de su servidor.
La mejor práctica es sobrescribir la cookie actual con una cookie en blanco que caduque un segundo
en el futurodespués de la época (1 de enero de 1970 00:00:00 UTC), de la siguiente manera:fuente
Eso deshabilitará la cookie en su código, pero como la variable $ _COOKIE se actualiza en cada solicitud, volverá a aparecer en la siguiente solicitud de página.
Para deshacerse de la cookie, establezca la fecha de vencimiento en el pasado:
fuente
unset()
la cookie?Tuve el mismo problema en mi código y descubrí que era un problema de ruta de cookies. Echa un vistazo a esta publicación de desbordamiento de pila: no se puede eliminar la cookie set php
Había configurado la cookie usando un valor de ruta de "/", pero no tenía ningún valor de ruta cuando intenté borrarla, por lo que no se borró. Así que aquí hay un ejemplo de lo que funcionó:
Configuración de la cookie:
Borrar la cookie:
Espero que ayude.
fuente
Si configuró la cookie para que caduque en el pasado, el navegador la eliminará. Vea el ejemplo de eliminación de setcookie () en php.net
fuente
Vea la muestra etiquetada " Ejemplo # 2 setcookie () delete example " de los documentos PHP. Para borrar una cookie del navegador, debe decirle al navegador que la cookie ha caducado ... el navegador la eliminará.
unset
como lo ha usado, solo elimina la cookie 'hola' de la matriz COOKIE.fuente
Así es como funciona el código PHP v7 setcookie () cuando lo haces:
Desde la salida de tcpdump mientras olfatea en el puerto 80, el servidor envía al cliente (navegador) los siguientes encabezados HTTP:
Al observar los paquetes en las siguientes solicitudes, el navegador ya no envía estas cookies en los encabezados
fuente
Para eliminar la cookie solo necesita establecer el valor en NULL:
"Si ha configurado una cookie con valores no predeterminados para un tiempo de vencimiento, ruta o dominio, debe proporcionar esos mismos valores nuevamente cuando elimine la cookie para que la cookie se elimine correctamente". Cita del libro "Learning PHP5".
Entonces este código debería funcionar (funciona para mí):
Configuración de la cookie:
setcookie('foo', 'bar', time() + 60 * 5);
Eliminar la cookie:
setcookie('foo', '', time() + 60 * 5);
Pero me di cuenta de que todo el mundo está fijando la fecha de vencimiento como pasada, ¿es necesario y por qué?
fuente
''
no es lo mismo quenull
.Para eliminar todas las cookies, puede escribir:
fuente
Simplemente configure la fecha de vencimiento a una hora atrás, si desea "eliminar" la cookie, de esta manera:
o
Fuente: http://www.php.net/manual/en/function.setcookie.php
Debe usar la
filter_input()
función para todos los globales que un visitante puede ingresar / manipular, de esta manera:Puede leer más sobre esto aquí: http://www.php.net/manual/en/function.filter-input.php y aquí: http://www.w3schools.com/php/func_filter_input.asp
fuente
Sé que ha pasado mucho tiempo desde que se creó este tema, pero vi un pequeño error en esta solución (puedo llamarlo así, porque es un detalle). Estoy de acuerdo en que la mejor solución es probablemente esta solución:
Pero, en el presente caso, elimina las cookies en todos los casos en que funciona la función no establecida e inmediatamente crea nuevas cookies caducadas en caso de que la función no establecida no funcione.
Eso significa que, incluso si la función de desactivación funciona, seguirá teniendo 2 cookies en la computadora. El objetivo solicitado, en un punto de vista lógico, es eliminar las cookies si es posible y si realmente no lo es, hacer que caduque; para obtener el resultado "más limpio".
Entonces, creo que mejor deberíamos hacer:
Gracias y que tenga un buen día :)
fuente
fuente
Si desea eliminar la cookie por completo de todo su dominio actual, entonces el siguiente código definitivamente lo ayudará.
Este código eliminará la variable de cookies por completo de todo su dominio, es decir; "/": indica que el valor de la variable de cookie está configurado para todos los dominios, no solo para el dominio o ruta actual. time (): 300 indica que se establece en un tiempo anterior, por lo que caducará.
Así es como se elimina perfectamente.
fuente
Puede establecer una variable de sesión basada en valores de cookies
fuente
Simplemente puede usar esta función de personalización:
Si desea eliminar $ _COOKIE ['user_account'].
Solo usa:
fuente
¡Es sencillo!
fuente
Cuando ingresas
0
por tiempo, te refieres a "ahora" (+ 0s desde ahora es en realidad ahora) para el navegador y elimina la cookie.Lo revisé en el navegador Chrome que me da:
fuente
Simplemente configure el valor de cookie
false
en para desarmarlo,PD: - Esa es la forma más fácil de hacerlo.
fuente
Debe eliminar las cookies con php en su servidor y también con js para su navegador ... (Se han hecho con php, pero los archivos de cookies también están en el cliente del navegador):
Un ejemplo:
fuente
La mayoría de ustedes olvida que esto solo funcionará en una máquina local. En un dominio necesitará un patrón como este ejemplo.
fuente
setcookie
funciona para cualquier dominio, localhost o no.