2009-08-12 22 views
13

¿Hay alguna forma de instruir a un navegador web para que elimine por completo eliminar una cookie establecida con PHP?¿Eliminar cookie del navegador?

no quiero a de caducidad o esperar a que el navegador para ser cerrado.

Con delete me refiero a que realmente ya no aparece listado en la lista de cookies.

+0

Puede "pedir cortésmente" al navegador que elimine la cookie estableciendo su valor en una cadena vacía, o estableciendo el tiempo de caducidad en alguna fecha pasada, o usando '$ cookie-> delete();' desde https : //github.com/delight-im/PHP-Cookie – caw

Respuesta

9

No se puede forzar el navegador para borrar el archivo asociado a cualquier galleta, porque no se puede garantizar que hay en realidad un archivo de este tipo - el contrato entre el navegador y el servidor web en relación con las galletas es que los datos se presentarán en las solicitudes elegibles.

Indique que "no desea esperar a que caduque la cookie", pero la caducidad de cookies es el método correcto para indicar que los datos ya no se necesitan y no se deben presentar en solicitudes futuras, que en la mayoría los casos se traducen en el navegador que elimina el archivo.

Para eliminar una cookie, por lo tanto, establezca su tiempo de caducidad en el pasado. En PHP, esto se hace con setcookie().

+0

Esta fue la más cercana de las respuestas (el párrafo 1 es). Gracias. –

5

Sí. Use setcookie() y configure la fecha de caducidad de la cookie que desea eliminar en un momento anterior. El navegador del usuario debería eliminarlo automáticamente como resultado.

-1

Escribí este complemento y funciona correctamente.

(function($) { 
    $.cookieAllDelete = function(doc) 
    { 
     var cookie_date = new Date(); 
     var cookies = null; 

     cookies = doc.cookie.split(';'); 
     cookie_date.setTime(cookie_date.getTime() - 1); 

     for(var i=0; i < cookies.length; i++) 
     { 
      var cookie_name = cookies[i].split('=')[0]; 
      try { 
       if (cookie_name.length > 0) 
        doc.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString(); 
      } catch(ex) {} 
     } 
    } 
})(jQuery); 

jQuery.cookieAllDelete(document); 
+3

¿Qué tan bien funciona eso si tengo JavaScript desactivado? :-) – ceejayoz

+0

Lo siento, también estaba buscando etiquetas jQuery y estoy confundido. gracias por abajo –

+1

Abajo no era de mi parte. – ceejayoz

19

intentar algo como esto para borrar todas las cookies:

foreach ($_COOKIE as $name => $value) { 
    setcookie($name, '', 1); 
} 

El valor 1 es el expiran valor y que representa un segundo después de comenzar el tiempo de la época Unix. Por lo tanto, siempre está vencido.

+0

Alguien bajó y votó negativamente todas las respuestas que tenían que ver con Caducidad, ya que la pregunta decía que no querían caducar. –

+17

@ Chacha102: Bueno, entonces alguien no sabe cómo funcionan las cookies. – Gumbo

+0

@Gumbo O puede improvisar y ajustar esta respuesta suya en una función llamada 'deleteAllCookies' para falsificarla para esa persona. : P – choz

1

creo que usted tiene que utilizar el enfoque combinado:

  • establecer la caducidad del camino de regreso en el pasado (como lo sugiere Chacha102)
  • uso JavaScriptto eliminar entradas de objeto document.cookie DOM (como lo sugiere Andrés Descalzo)

Hay 2 buenas razones para ir con enfoque mixto:

  • JavaScript se puede deshabilitar en el navegador
  • no todas las cookies están visibles en document.cookie Algunos navegadores modernos admiten la marca httponly para las cookies. PHP tiene soporte para cookies HttpOnly, ver http://www.php.net/setcookie
3

'Parece que eliminar una cookie es más difícil de lo que parece.

setcookie($name, '', 1); 

No se puede hacer el truco. El '' está vacío y setcookie puede ignorar toda la instrucción.

también establecer el tiempo al pasado a veces permite la cookie para retener el valor cuyo tiempo de expiración es más reciente que 1.

estoy tratando con esto ahora mismo. No sé de dónde viene, pero está allí.

he recurrido a

setcookie($name, '0', 9000000000); 

Esto asegura la cookie se establece en un valor que se resuelve en falso y que es más reciente que cualquier valor anterior.

Si alguien tiene alguna idea sobre este comportamiento, dígaselo.

Sospecho que la dificultad radica en el hecho de que los valores de dominio y ruta para setcookie tienen la garantía de ser los mismos desde la ejecución hasta la ejecución cuando no se especifican los valores.

Y soy consciente de que dicha cookie no caducará hasta 2038 más o menos.

Como alternativa, si se conoce la fecha de caducidad más reciente de la cookie, solo debe establecerse 1 segundo después.

+0

En mi caso, la razón por la que setcookie no funcionó es porque no usé la misma ubicación para el cuarto parámetro. Así que asegúrese de utilizar la misma ubicación para el 4º parámetro, para eliminar la cookie con éxito. – Antony

+1

Encontré que debe establecer los mismos parámetros para configurar y eliminar la cookie. Set Cookie: setcookie ($ name, $ uid ', $ time,'/',' ', 0); - Eliminar cookie: setcookie ($ nombre, $ uid ', 1,'/',' .dominio.nombre ', 0); no funcionará, el quinto parámetro debe ser el mismo para ambos. – Grant

+0

Imprimir matriz $ _COOKIE, clave perticular no configurada: unset ($ _ COOKIE [$ nombre]); – ShivarajRH

Cuestiones relacionadas