Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Leguim en 3 Abril 2020, 20:40 pm



Título: [Pregunta]: ¿Como eliminar una cookie en específico?
Publicado por: Leguim en 3 Abril 2020, 20:40 pm
Buenos días,

estaba investigando sobre como podía eliminar una cookie con PHP y según lo que he visto hay dos maneras que me confunden un poco. Hay como un debate de que es mejor y que no, otros que dicen que se puede complementar y ya me terminan confundiendo.

La primer manera que se dice es:
Código
  1. unset($_COOKIE['my_cookie']);
  2.  

Y la segunda manera es:
Código
  1. setcookie('my_cookie'); // con este método se elimina la cookie
  2.  

No se bien cual es mejor hacer, o si es así como se dice que hay que complementarlas pero siendo así cual conviene escribir primero en el código?


Mod: Temas sobre PHP van al subforo de PHP.


Título: Re: [Pregunta]: ¿Como eliminar una cookie en específico?
Publicado por: #!drvy en 3 Abril 2020, 21:52 pm
Hola,

Las cookies no se eliminan como tal sino que se marcan como expiradas para que el navegador las elimine. Dicho esto, lo ideal es hacer las 2 cosas y de manera clara y limpia.

Código
  1. if (isset($_COOKIE['my_cookie'])) {
  2.    unset($_COOKIE['my_cookie']);
  3.    setcookie('my_cookie', '', time() - 3600, '/');
  4. }

Con unset te aseguras que el resto del código que se tenga que ejecutar no va a interpretar el valor de la cookie. Con un setcookie en negativo (en este caso 1 hora menos que la actual), le estas diciendo al navegador que esta cookie ha expirado y que debe eliminarla. La eliminación de la cookie por parte del navegador puede NO ser instantánea, por ello también se la pasa un valor vació (segundo argumento) a fin de evitar retomar el valor antiguo.


Saludos


Título: Re: [Pregunta]: ¿Como eliminar una cookie en específico?
Publicado por: Leguim en 3 Abril 2020, 22:52 pm
Gracias, en pocas lineas me explicaste todo.

Mi unsetcookie casero xD

Código
  1. if(!function_exists('unsetcookie'))
  2. {
  3. function unsetcookie($name)
  4. {
  5. if(is_string($name))
  6. {
  7. if(isset($_COOKIE[$name]))
  8. {
  9. unset($_COOKIE[$name]);
  10. setcookie($name, '', time() - 3600, '/');
  11. }
  12. }
  13. }
  14. }
  15.  

Creo que ahí quedó bien...

Gracias!