2011-06-30 23 views
6

No estoy seguro de si mi pregunta está relacionada con this one o no.Cómo matar las cookies zombie

IE9 elimina esta cookie después de cerrar el navegador (esperado), pero Chrome 12, Firefox 5 y Opera 11 no lo hacen. (Durante las pruebas del ejemplo siguiente, cada navegador se cierra después de hacer clic a continuación Ellos se volvieron a abrir después de un corto período de tiempo y en todos menos en IE9 las galletas estaban todavía allí "Eliminar cuenta"..)

Caso de uso: La cookie caduca 1 año después de la última visita del usuario. La eliminación de la cuenta debería eliminar la cookie.

Pregunta:
(1/2) ¿Por qué IE9 hacer la derecha (esperado) cosa y los otros no lo hacen?
(2/2) ¿Cómo puedo asegurarme de que todos los navegadores destruyan esta cookie?

Ejemplo:

login.html

<!doctype html> 
<html> 
    <head> 
     <title>Create Cookie Example</title> 

     <script> 
      function setCookie() { 
       var expDate = new Date(); 
       expDate.setDate(expDate.getDate() + 365); 
       document.cookie = "fakeCookie=" + escape("fake value") 
        + "; expires=" + expDate.toGMTString(); 
      } 
     </script> 
    </head> 

    <body onload="setCookie()"> 
     <h1>Welcome</h1> 
     <p>Lorem ipsum...</p> 
     <hr size="1" /> 
     <p><a href="profile.html">User Profile</a></p> 
    </body> 
</html> 

profile.html

<!doctype html> 
<html> 
    <head> 
     <title>Delete Cookie Example</title> 

     <script> 
      function deleteConfirm() { 
       if (confirm("Are you sure you want to delete your account? " 
          + "All data will be lost; this action cannot be undone!") 
        ) deleteConfirmed() 
       else return false 

       return true; 
      } 

      function deleteConfirmed() { 
       document.cookie = "fakeCookie=; expires=Thu, 01-Jan-70 00:00:01 GMT"; 
      } 
     </script> 
    </head> 

    <body> 
     <h1>User Profile</h1> 
     <p>Lorem ipsum...</p> 
     <hr size="1" /> 
     <p><a href="index.html" onclick="return deleteConfirm()">Delete Account</a></p> 
    </body> 
</html> 

Editar: El post original identificó incorrectamente login.html como index.html (formando una referencia circular que re crear la cookie cuando se eliminó la "cuenta".)

+7

+1, el título de tu pregunta podría ser un título de película :) PD: Lo siento por la off.topic – meo

+4

@meo estaba pensando la misma cosa! Ataque de las cookies Zombie que comen ciclos de CPU lol –

+2

'document.cookie =" whatever =; expires = Jue, 01-Ene-70 00:00:01 GMT "' borra el valor de la cookie para mí. – Robert

Respuesta

5

OP generó esta respuesta y la editó inicialmente en la pregunta. Esto es solo un repost para mantener la solución en una publicación de respuesta, para la semántica.

 <script> 
      function deleteConfirm() { 
       if (confirm("Are you sure you want to delete your account? " 
          + "All data will be lost; this action cannot be undone!") 
        ) deleteConfirmed(); // <-- ** MISSED SEMICOLON HERE ** 
       else return false;  // <-- ** AND HERE ** 

       return true; 
      } 

      function deleteConfirmed() { 
       document.cookie = "fakeCookie=; expires=Thu, 01-Jan-70 00:00:01 GMT"; 
      } 
     </script>